1

vnc サーバーを実行しようとしていますが、最初に「module load vnc」を実行する必要があります。

ロードされたbashシェルで呼び出すとwhich module、見つからないコマンドはPATHですが、同時に使用できます。コマンドが組み込まれているようです。

つまり、一度に 2 つのコマンドを実行する必要がありmodule load vnc;vncserver :8080 -localhost、Python から起動するスクリプトを書いているようです。私はさまざまなバリアントを試してみましsubprocess.Popen

subprocess.Popen('module load vnc;vncserver :8080 -localhost', shell=True) 

127終了コードまたはを返しますcommand not found

subprocess.Popen('module load vnc;vncserver :8080 -localhost', shell=False)

見せている

File <path>/subprocess.py line 621, in \__init__    
                                   errread, errwrite)
OSError: [Errno 2] No such file or directory.

を指定するshell=Trueと、から実行されますが、から/bin/shが必要/bin/bashです。

新しいbashシェルをロードするため、指定executable='/bin/bash'しても役に立ちませんが、プロセスとしてではなく文字列として開始されます。つまり、ps開始したいコマンドとまったく同じコマンドがリストに表示されます。

サブプロセスモジュールからこのコマンドを開始する方法を教えてください。で始めることは可能shell=Falseですか?

4

3 に答える 3

2

環境モジュールは通常、いくつかの環境変数を変更するだけです。通常、このmodule load whateverステップを完全にスキップして、それらのモジュールに依存しないようにすることができます。私はお勧め

subprocess.Popen(['/possibly/path/to/vncserver', ':8080', '-localhost'], 
                 env={'WHATEVER': 'you', 'MAY': 'need'})

モジュールをまったくロードする代わりに。

この基本的な方法を使用することを主張する場合は、自分で bash を開始する必要がありますPopen(['bash',...

于 2011-08-19T15:23:13.003 に答える
0

で実行したい場合は、これを 2 つの呼び出しshell=Falseに分割してください。Popen

subprocess.check_call('module load vnc'.split())
subprocess.Popen('vncserver :8080 -localhost'.split())
于 2011-08-19T14:57:19.517 に答える