2012-04-25 18 views
0

大きなアプリケーションの一部として、私は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コードをしようとした場合。

コールがこれらの引数をどのように渡すか、またはコマンドを実行する方法にはいくつかの違いがありますか?

+4

、として引数を渡します配列( ''スクリーン ''、 '-d'、 '-m'、 '-S'、 'test'] ')ではなく、文字列(' 'screen -d -m -S test" ')それはちょうど文字列に結合され、その方法でシェルに渡されます。引数を分割して 'execv()'システムコールに渡す方法を制御できますng 'shell = True'、あなたは実際にそのコントロールを与えています。 –

+2

@Charles Duffy:それは答えにする必要があります。 – zigg

+0

@CharlesDuffyこの行を追加しようとしました。なぜなら、shell = Trueでは何もしないように見えるからです。 – varesa

答えて

0

は(shell=Trueなし)私にとってこの

cmd=["screen", "-d", "-m", "-S", "test", "bash"] 
call(cmd) 
0

作品をお試しください。

次のスクリプトで、次のとおりです。

#!/usr/bin/env python 
from subprocess import * 
cmd=['screen', '-d', '-m', '-S', 'test'] 
call(cmd) 

呼び出しが正常にバックグラウンドにスクリーン処理を開始します:あなたは `シェル= true`をを使用するつもりなら

$ screen -ls 
No Sockets found in /var/run/screen/S-cduffy. 

$ ./screen-startup-test 
$ screen -ls 
There is a screen on: 
     12161.test  (04/25/2012 03:47:32 PM)  (Detached) 
1 Socket in /var/run/screen/S-cduffy. 
+1

奇妙な...私のために 'screen-list'は何も表示していません – varesa

+1

実際には動作しているようですが、私のコードでいくつかの誤植があったに違いありません... – varesa

関連する問題