0

subprocess.call()またはを使用してシェル スクリプトを実行しようとするとos.system()、スクリプトは実行されますが、Python スクリプトも終了し、呼び出しの後に記述されたすべてが実行されません。ライブラリからこの呼び出しをインポートし、別の python スクリプトを使用して実行または実行しようとしましたexecfile()が、そこでも同じことが起こりました。私のシステムに何か問題がありますか、それともこれが本来あるべき状態ですか? 後者の場合、このサブプロセス/システム呼び出しを行った後、これを停止して Python スクリプトを実行し続けるにはどうすればよいですか?

shushens@P600:~/Desktop$ python
Python 2.7.2+ (default, Oct  4 2011, 20:03:08) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(["sh","test.sh"])
shushens@P600:~/Desktop$

これはシェルスクリプトです:

export <SOMEPATHNAME>=/some/path/here
exec $SHELL -i

exec $SHELL -iその特定のシェルで実行されているすべてのプログラムを終了させて​​いるのは、 だと思います。しかし、他にどのような選択肢があるのか​​ わかりません。使わないとexport動かない。現在、エクスポートしたいパスは exporting ですが、Python プロセスはそれに伴って終了します。

前もって感謝します!

4

1 に答える 1

3

シェルはスクリプトを強制終了するのではなく、ユーザーが要求したことを正確に実行し、新しいインタラクティブな bash セッションを開始します。サブプロセスを呼び出した後、ps を実行しても、python がまだ実行されていることに注意してください。さらに、bash セッションを終了すると、Python インタープリター/スクリプトに戻ります。

bago@bago-laptop:~$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(['sh', 'test.sh'])
bago@bago-laptop:~$ ps
  PID TTY          TIME CMD
 1412 pts/3    00:00:00 bash
 1485 pts/3    00:00:00 python
 1486 pts/3    00:00:00 bash
 1509 pts/3    00:00:00 ps
bago@bago-laptop:~$ exit
exit
0
>>> print "im back in python"
"im back in python"
>>> exit()

エクスポートでは、新しい bash セッションを開始する必要はありません。エクスポートを使用している理由はわかりませんが、os.environ['SOMEPATHNAME'] = "/some/path/here". これにより、使用する前に Python スクリプトに環境変数が設定されますsubprocess.call

于 2012-04-06T15:30:57.580 に答える