0
[root@localhost root]$ cat test.c
#include <stdio.h>
int main(int argc, char*argv[]){
system("/bin/sh");
}

[root@localhost root]$ cat auto 
#!/usr/bin/env python
subprocess.Popen(['/root/test'])

新しいシェル コマンド ラインを実行するためにサブプロセスを使用したい

しかし、すぐに閉じられました。理由はわかりません。

新しいシェル コマンド ラインを続行するにはどうすればよいですか?

サブプロセスモジュールの代わりに同じことを行う別の方法がある場合は、お知らせください:)

下手な英語でごめんなさい

4

2 に答える 2

1

コマンドラインからではなく、GUIでダブルクリックしてPythonスクリプトを実行していると思います(/bin/shシェルから開くのはほとんど役に立たないため)。これにより、インポートするのを忘れたため、NameErrorことわざが定義されていないことがわかりません。subprocess

ただし、それを修正しても問題は解決しません。

まず、C プログラムは不要であることを認識してください。/bin/sh直接やり直すことができますsubprocess.Popen。しかし、私が推測しているように、GUI からスクリプトを実行してそれを行っている場合、シェルが実行されている新しいターミナル ウィンドウが表示されることはありません。/bin/shTTY で実行されていないことに気付き、すぐに終了します。

代わりに、おそらくやりたいことは、新しい端末を起動して、シェルを実行させることです。その方法は、通常使用する端末によって異なりますが、xterm を使用している場合は、次の方法で実行できます (他の一般的な端末には gnome-terminal や konsole があります)。

#!/usr/bin/env python

import os

os.execv('/usr/bin/xterm', ['xterm'])

(またはのos.execv何かではなく、使用する必要があります。これにより、新しいターミナルが Python プロセスの子として無意味に実行されるのではなく、置き換えられるためです。)subprocessos.system

于 2013-05-20T04:27:06.513 に答える