Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: subprocess

subprocess 8 Χρόνια 11 Μήνες πριν #2881

  • Foteini
  • Το Άβαταρ του/της Foteini
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 16
Καλησπέρα και πάλι και καλο Πάσχα!

Έχω φτιάξει το εξής προγραμματάκι:
subprocess.call(["lcurve","1","70096011801_STD2_02_30kev_net.lc","window=-","dtnb=200","nbint=200","outfile=filename.fits","plot=no"]) 

το οποίο μου τρέχει μια χαρά. Αυτό που κάνει είναι να ανοίγει ένα πρόγραμμα (lcurve) και να περνάει τις διάφορες παραμέτρους που του έχω δώσει. Όλα αυτά για ένα αρχείο,το 70096011801_STD2_02_30kev_net.lc.

Αυτό θέλω να το κάνω για πολλά αρχεία. Έχω φτιάξει λοιπόν ένα txt έγγραφα (list230.txt") κι έχω βάλει μέσα όλα αυτά τα αρχεία που θέλω να τρέξει. Έπειτα έφτιαξα το εξης πρόγραμμα :
def multilcurve():
    fname=("list230.txt")
    lines = [line.strip() for line in open(fname)]    
    for k in range( len(lines)): 
          filename=lines[k]
          print filename
          subprocess.call(["lcurve","1","filename","window=-","dtnb=200","nbint=200","outfile=filename.fits","plot=no"])
if __name__=='__main__':
    multilcurve()

Ανοίγει το πρόγραμμα (το lcurve) όμως μου βγάζει το εξης σφάλμα
xrgetfiles: filename does not exist
xrgetparams: Error getting input filenames.
lcurve: Error reading parameters
70096-01-24-04_STD2_02_30kev_net.lc

και μου το βγάζει για κάθε αρχείο του txt ξεχωριστά.

Τι μπορεί να παίζει?
Τελευταία διόρθωση: 8 Χρόνια 11 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

subprocess 8 Χρόνια 11 Μήνες πριν #2882

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Αυτό είναι αυτό που έχεις γράψει:
for filename in filenames:
    subprocess.call(["lcurve","1","filename","window=-","dtnb=200","nbint=200","outfile=filename.fits","plot=no"])

Ενώ αυτό είναι αυτό που θα έπρεπε να είχες γράψει:
for filename in filenames:
    subprocess.call(["lcurve","1",filename,"window=-","dtnb=200","nbint=200","outfile=%s.fits" % filename,"plot=no"])

Εν ολίγοις καλούσες την subprocess.call() όχι με το όνομα του αρχείου που είναι αποθηκευμένο στη μεταβλητή filename, αλλά με το string "filename".

Tip: Χρήσιμο βοήθημα για την subprocess.call() ειναι το module shlex pymotw.com/2/shlex/ Πχ, στην περίπτωσή σου θα μπορούσες να χρησιμοποιήσεις κάτι τέτοιο:
import shlex
 
lcurve_command = "lcurve 1 {filename} window=- dtnb=200 nbint=200 outfile {filename}.fits plot=no"
 
for filename in filenames:
    command = lcurve_command.format(filename=filename)
    subprocess.call(shlex.split(command))

ΥΓ. Σε παρακαλώ να χρησιμοποιείς code tags για τον κώδικα που παραθέτεις για να είναι περισσότερο ευανάγνωστος.
Τελευταία διόρθωση: 8 Χρόνια 11 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": Foteini

subprocess 8 Χρόνια 11 Μήνες πριν #2883

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
@Foteini

Για τη shlex και subprocess, είχα αναφερθεί σε προηγούμενό σου post.
Επίσης αν το πρόβλημά σου λύνεται, καλό θα ήταν να το αναφέρεις, καθώς και τον τρόπο που λύθηκε, για μελλοντική χρήση, από κάποιον άλλο.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

subprocess 8 Χρόνια 10 Μήνες πριν #2948

  • Foteini
  • Το Άβαταρ του/της Foteini
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 16
Τελικά ο pmav99 είχε δίκιο!!μια χαρά έτρεξε έτσι!ευχαριστώ πολύ!!!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.255 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου