Frage

Ich habe derzeit ein großes Problem mit einem Python-Skript. Das Skript führt beliebige Befehle durch einen Handler falsche Fehler umwandeln in Bericht korrekte Fehlerberichterstattung.

Das Problem, das ich habe ist immer das Skript korrekt mit einem Befehl an den Fenstern zu arbeiten, die kaufmännischen Und-Zeichen enthält darin Weg ist. Ich habe den Befehl versuchter zitiert, kaufmännisches Flucht mit ^ und weder Werken. Ich bin jetzt die Ideen aus. Irgendwelche Vorschläge?

Zur Klärung von aktuellen Antworten:

  1. Ich bin mit dem Subprozess Modul
  2. Ich bin die Befehlszeile + Argumente als Liste geben
  3. Das Problem ist, mit dem Pfad zu dem Befehl selbst, nicht eines des Arguments
  4. Ich habe versucht, den Befehl zu zitieren. Es verursacht einen [Error 123] The filename, directory name, or volume label syntax is incorrect Fehler
  5. Ich verwende kein Shell-Argument (so shell=false)
  6. Falls es wichtig ist, ich bin ein Rohr greifen für die Verarbeitung es nach stderr, aber stdout und stdin ignorieren
  7. Es ist nur für den Einsatz unter Windows zur Zeit, und arbeitet in allen anderen Fällen, wie erwartet, die ich bisher getestet habe.
  8. Der Befehl, die fehlschlägt ist:
  

p = subprocess.Popen (prog, stderr = subprocess.PIPE, bufsize = -1)

, wenn das erste Element der Liste ‚prog‘ kein Et-Zeichen enthält. Dieses erste String Zitiert funktioniert nicht.

War es hilfreich?

Lösung

Stellen Sie sicher, Sie verwenden Listen und keine Shell-Erweiterung:

subprocess.Popen(['command', 'argument1', 'argument2'], shell=False)

Andere Tipps

Eine richtige Antwort wird mehr Informationen als das braucht. Was machst du eigentlich? Wie funktioniert nicht wahr? Sind Sie mit dem Subprozess-Modul? Gibst du eine Liste von Argumenten und shell = False (oder keine Shell-Argument) oder Aufruf Sie tatsächlich die Schale?

Versuchen Sie, das Argument zu zitieren, die die &

enthält
wget "http://foo.com/?bar=baz&baz=bar"

Ist in der Regel, was in einem Linux-Shell

getan werden muss,

"Flucht aus dem Ampersand mit ^"

Sind Sie sicher, ^ ist ein Escape-Zeichen auf Windows? Sollten Sie nicht \ verwenden?

Um meine eigene Frage zu beantworten:

den eigentlichen Befehl Zitiert wenn die Parameter übergeben, wie eine Liste nicht richtig funktioniert (Befehl erstes Element der Liste), um das Problem zu lösen ich die Liste in einen Raum getrennten Zeichenfolge gedreht und geführt, dass in der Subprozess statt.

Bessere Lösungen nach wie vor willkommen.

ich versuche, eine Situation wie folgt:

exe = 'C:/Program Files (x86)/VideoLAN/VLC/VLC.exe'
url = 'http://translate.google.com/translate_tts?tl=en&q=hello+world'
subprocess.Popen([exe, url.replace("&","^&")],shell=True)

Dies funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top