正しい答え (Python 2.7 以降を使用、check_output()
導入されたため) は次のとおりです。
py2output = subprocess.check_output(['python','py2.py','-i', 'test.txt'])
実演するために、ここに私の2つのプログラムがあります:
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)
それを実行する:
$ python3 py3.py
py2 said: b"['py2.py', '-i', 'test.txt']\n"
各バージョンの問題点は次のとおりです。
py2output = subprocess.check_output([str('python py2.py '),'-i', 'test.txt'])
まず、はとまったくstr('python py2.py')
同じです。これにより、コードが読みにくくなり、長くなり、さらに遅くなりますが、メリットはありません。'python py2.py'
str
str
str
もっと深刻なpython py2.py
ことに、たとえば/usr/bin/python\ py2.py
. あなたはそうではありません。/usr/bin/python
たとえば、最初の引数で実行しようとしていますpy2.py
。したがって、それらをリスト内の個別の要素にする必要があります。
'
2番目のバージョンではそれが修正されていますが、 beforeがありませんtest.txt'
。これによりSyntaxError
、おそらくEOL while scanning string literal
.
その間、ドキュメントをどのように見つけたのかわかりませんが、引数のある例は見つかりませんでした. 最初の例は次のとおりです。
>>> subprocess.check_output(["echo", "Hello World!"])
b'Hello World!\n'
これは"echo"
、追加の引数を指定してコマンドを呼び出します"Hello World!"
。
また:
-i は argparse の位置引数で、test.txt は -i の内容です
-i
は位置引数ではなく、オプションの引数であると確信しています。そうしないと、文の後半が意味をなしません。