Die richtige Antwort ist:
py2output = subprocess.check_output(['python','py2.py','-i', 'test.txt'])
Um zu demonstrieren, hier sind meine zwei Programme:
py2.py:
import sys
print sys.argv
py3.py:
import subprocess
py2output = subprocess.check_output(['python', 'py2.py', '-i', 'test.txt'])
print('py2 said:', py2output)
es Laufen :
$ python3 py3.py
py2 said: b"['py2.py', '-i', 'test.txt']\n"
Hier ist, was mit jedem Ihrer Versionen falsch:
py2output = subprocess.check_output([str('python py2.py '),'-i', 'test.txt'])
Zuerst str('python py2.py')
ist genau die gleiche wie 'python py2.py'
-Sie ein str
nehmen, und rief str
es zu einem str
zu konvertieren. Dies macht den Code schwerer lesbar, länger und sogar langsamer, ohne dass ein Vorteil entsteht.
Ernsthafter, python py2.py
kann kein einzelnes Argument sein, es sei denn, Sie versuchen tatsächlich, ein Programm mit dem Namen, sagen wir /usr/bin/python\ py2.py
. Was du nicht bist; Sie versuchen zu laufen, sagen wir /usr/bin/python
mit dem ersten Argument py2.py
. Sie müssen also die Elemente in der Liste trennen.
Ihre zweite Version behebt das, aber Sie vermissen die '
vor test.txt'
. Dies sollte Ihnen eine SyntaxError
geben, wahrscheinlich EOL while scanning string literal
.
In der Zwischenzeit bin ich nicht sicher, wie Sie Dokumentation gefunden, aber konnte keine Beispiele mit Argumenten finden. Das erste Beispiel ist:
>>> subprocess.check_output(["echo", "Hello World!"])
b'Hello World!\n'
dass der "echo"
Befehl mit einem zusätzlichen Argumente aufruft, "Hello World!"
.
auch:
-i ist ein Positions Argument für argparse, Test.txt ist, was die -i ist
Ich bin mir ziemlich sicher, dass -i
ist nicht ein Positions Argument, sondern ein optionales Argument. Ansonsten macht die zweite Hälfte des Satzes keinen Sinn.
Was genau passiert ist, wenn sie nicht funktioniert haben? – khagler
Sie versuchen, eine Python 2-Datei über Python 3 auszuführen? Nein, wird nicht passieren. Python 3 ist absichtlich nicht abwärtskompatibel zu Python 2. Sie müssten '2to3' für * Starter * ausführen, um Ihre Datei in Python 3 zu verwenden. – Makoto
@Makoto: Er versucht, den Python 2-Interpreter innerhalb von a auszuführen Python 3 Skript, das ist völlig in Ordnung. (Und von seiner vorherigen Frage zufällig wissen, dass er es speziell als Workaround für genau die Probleme, die Sie denken, aber das ist hier nicht relevant.) – abarnert