96

subprocess.check_output() に関するドキュメントを見つけましたが、引数のあるドキュメントが見つかりません。ドキュメントはあまり詳細ではありません。Python 3 を使用しています (ただし、Python 3 で Python 2 ファイルを実行しようとしています)

このコマンドを実行しようとしています: python py2.py -i test.txt

-i は argparse の位置引数、test.txt は -i、py2.py は実行するファイルです。

次のような多くの(機能しない)バリエーションを試しました。 py2output = subprocess.check_output([str('python py2.py '),'-i', 'test.txt'])

py2output = subprocess.check_output([str('python'),'py2.py','-i', test.txt'])

4

3 に答える 3

95

正しい答え (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'strstrstr

もっと深刻な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は位置引数ではなく、オプションの引数であると確信しています。そうしないと、文の後半が意味をなしません。

于 2012-12-29T02:45:57.200 に答える
13

@abarnertが言及したものに追加

より良い方法は、例外をキャッチすることです

import subprocess
try:
    py2output = subprocess.check_output(['python', 'py2.py', '-i', 'test.txt'],stderr= subprocess.STDOUT)  
    #print('py2 said:', py2output)
    print "here"
except subprocess.CalledProcessError as e:
    print "Calledprocerr"

このstderr= subprocess.STDOUTは、stderr で filenotfound エラーが発生しないようにするためのものです。これは通常、filenotfoundexception でキャッチできません。

python: can't open file 'py2.py': [Errno 2] No such file or directory

実際、これに対するより良い解決策は、ファイル/スクリプトが存在するかどうかを確認してから、ファイル/スクリプトを実行することです

于 2015-10-30T06:17:14.043 に答える