subprocess.Popenへのすべての呼び出しをログに記録して、同等のバッチ/シェルファイルを作成できるようにします。
Pythonはどのようにして引数のリストをコマンドに変換しますか?
それは同等' '.join([args])
ですか?
例えば:
args=['ls', '-A']
subprocess.Popen(args)
# ...
すべての呼び出しと同等のファイルを取得したい:
ls -A
subprocess.Popenへのすべての呼び出しをログに記録して、同等のバッチ/シェルファイルを作成できるようにします。
Pythonはどのようにして引数のリストをコマンドに変換しますか?
それは同等' '.join([args])
ですか?
例えば:
args=['ls', '-A']
subprocess.Popen(args)
# ...
すべての呼び出しと同等のファイルを取得したい:
ls -A
いいえ、それと同等ではありません (一部の引数にはスペースやその他のシェル メタ文字が含まれている可能性があるため)。実際、shell=True を使用しない限り、Python はすべての引数を 1 つの文字列に結合する必要はまったくありません。exec*() のような呼び出し (man execve を参照) を使用し、引数を配列で渡します。
後で引数リストを再作成するのに十分な情報を出力したい場合は、単に出力したいかもしれませんrepr(args)
。
あなたの目標は、同等のバッチ/シェル ファイルを作成することであるため、シェルが引数を分割する方法に影響を与えないように、引数を引用する特別な手順を実行する必要があります。これを行う 1 つの方法は、https://gist.github.com/790722にあるような関数を介して各引数を渡すことです(ただし、バッチ ファイルの安全な引用を行う方法はわかりません)。