2016-05-27 17 views
1

Wenn ich einen Befehl durch Subprozess ausführen, bekomme ich den Exit-Status 1 ohne mein Drucken oder den Fehler ausgelöst.Subprozess gibt Exit Status 1 zurück

hier ist mein Code:

def generate_model(self): 
     if not ((self.username == None) or (self.password == None) or (self.database == None)): 
      cmd = "python -m pwiz -e %s -H %s -u %s -P %s %s > %s"%(self.engine,self.host,self.username,self.password,self.database,self.database+".py") 
      print subprocess.check_call(cmd) 
     else: 
      raise ValueError 

Befehl fragt eine Eingabe einmal Terminal geöffnet wird. Danach wird es mit exit status 1

schließt, wenn ich den gleichen Befehl direkt in Befehl ausführen Prompt es fein

+1

Haben Sie versucht, Ihren Befehl innerhalb eines Arrays mit jeder Zeichenfolge getrennt zu setzen? d. h. '['python', '-m', 'pwiz']' ... Sie können auch 'shlex.split' verwenden. – Idos

+0

Ja, ich habe es versucht, sogar, dass 'exit code 1' zurückgibt – Harwee

+0

Der Hinweis @Idos gegeben ist ein wirklich guter, da es erforderlich ist, um die Befehlsinjektion zu verhindern. Konstruiere niemals Befehle als Zeichenfolgen. Um das Problem zu lösen, sollten Sie 'cmd' drucken und das Programm ausführen. Bei '>' Umleitung muss möglicherweise 'shell = True' für' check_call() 'gesetzt werden. –

Antwort