大きなアプリケーションの一部として、私はsubprocess.call()
を使ってPythonで "screen"を作成しようとしています。gnu-screenとcall()で予期しない結果が発生しました
引数が-d -m
のスクリーンを作成すると、バックグラウンドで作成して、それに切り替える必要がありません。コマンドラインでscreen -d -m -S test
を実行すると、期待どおりに動作します。
cmd=["screen", "-d", "-m", "-S", "test"]
call(cmd,shell=True)
それが作成した画面にジャンプ:
は、しかし、私は次のPythonコードをしようとした場合。
コールがこれらの引数をどのように渡すか、またはコマンドを実行する方法にはいくつかの違いがありますか?
、として引数を渡します配列( ''スクリーン ''、 '-d'、 '-m'、 '-S'、 'test'] ')ではなく、文字列(' 'screen -d -m -S test" ')それはちょうど文字列に結合され、その方法でシェルに渡されます。引数を分割して 'execv()'システムコールに渡す方法を制御できますng 'shell = True'、あなたは実際にそのコントロールを与えています。 –
@Charles Duffy:それは答えにする必要があります。 – zigg
@CharlesDuffyこの行を追加しようとしました。なぜなら、shell = Trueでは何もしないように見えるからです。 – varesa