私はsubprocess.Popen
呼び出しを使用していますが、別の質問で、Python がコマンド ラインの引数を生成する方法を誤解していたことがわかりました。
私の質問
実際のコマンド ラインが何であったかを調べる方法はありますか?
コード例:-
proc = subprocess.popen(....)
print "the commandline is %s" % proc.getCommandLine()
どのように書きgetCommandLine
ますか?
私はsubprocess.Popen
呼び出しを使用していますが、別の質問で、Python がコマンド ラインの引数を生成する方法を誤解していたことがわかりました。
私の質問
実際のコマンド ラインが何であったかを調べる方法はありますか?
コード例:-
proc = subprocess.popen(....)
print "the commandline is %s" % proc.getCommandLine()
どのように書きgetCommandLine
ますか?
使用している Python のバージョンによって異なります。Python3.3では、引数は次の場所に保存されproc.args
ます。
proc = subprocess.Popen(....)
print("the commandline is {}".format(proc.args))
Python2.7 では、args
は保存されず、 などの他の関数に渡されるだけ_execute_child
です。したがって、その場合、コマンドラインを取得する最善の方法は、取得したら保存することです。
proc = subprocess.Popen(shlex.split(cmd))
print "the commandline is %s" % cmd
引数のリスト( によって返されるもののタイプなど)がある場合は、文書化されていない関数 を使用してshlex.split(cmd)
、コマンドライン文字列を復元できることに注意してください。cmd
subprocess.list2cmdline
In [14]: import subprocess
In [15]: import shlex
In [16]: cmd = 'foo -a -b --bar baz'
In [17]: shlex.split(cmd)
Out[17]: ['foo', '-a', '-b', '--bar', 'baz']
In [18]: subprocess.list2cmdline(['foo', '-a', '-b', '--bar', 'baz'])
Out[19]: 'foo -a -b --bar baz'
私の質問に対する正しい答えは、実際にはコマンドラインがないということです。サブプロセスのポイントは、IPC を介してすべてを行うことです。list2cmdline は期待できる限り近い動作をしますが、実際には「args」リストを見て、それが呼び出されたプログラムの argv になることを確認するのが最善の方法です。