1

subprocess.Popenへのすべての呼び出しをログに記録して、同等のバッチ/シェルファイルを作成できるようにします。

Pythonはどのようにして引数のリストをコマンドに変換しますか?

それは同等' '.join([args])ですか?

例えば:

args=['ls', '-A']
subprocess.Popen(args)
# ...

すべての呼び出しと同等のファイルを取得したい:

ls -A
4

1 に答える 1

1

いいえ、それと同等ではありません (一部の引数にはスペースやその他のシェル メタ文字が含まれている可能性があるため)。実際、shell=True を使用しない限り、Python はすべての引数を 1 つの文字列に結合する必要はまったくありません。exec*() のような呼び出し (man execve を参照) を使用し、引数を配列で渡します。

後で引数リストを再作成するのに十分な情報を出力したい場合は、単に出力したいかもしれませんrepr(args)

あなたの目標は、同等のバッチ/シェル ファイルを作成することであるため、シェルが引数を分割する方法に影響を与えないように、引数を引用する特別な手順を実行する必要があります。これを行う 1 つの方法は、https://gist.github.com/790722にあるような関数を介して各引数を渡すことです(ただし、バッチ ファイルの安全な引用を行う方法はわかりません)。

于 2012-07-12T19:20:59.390 に答える