3

最近、コマンドを完全に独立して開始したい状況に遭遇しました。スクリプトとは別のプロセスで、ターミナルにコマンドを入力するか、より具体的にはコマンドを .sh または .desktop に書き込んでダブルクリックします。 . 私が持っている要求は次のとおりです。

  • アプリケーションを閉じずに python ウィンドウを閉じることができます。
  • Python ウィンドウには、アプリケーションからの stdout が表示されません (CLI にランダムなテキストが表示されるのは望ましくありません)。

私が試したこと:

  • os.system が待機します。
  • subprocess.call は待機します。
  • subprocess.Popen はサブプロセスを開始し (duh) 親プロセスを閉じてアプリケーションを終了します

そして、それは基本的にあなたがウェブ上で見つけることができるすべてです! 結局のところ、.sh(またはWindowsの場合は.bat)を起動できますが、それは安っぽいハックのように感じられ、これを行う方法ではありません.

4

3 に答える 3

1

fork と exec を使用して、「UNIX の方法」で子プロセスを生成します。Python でのシェルの簡単な例を次に示します。

import os

prompt = '$ '
while True:
    cmds = input(prompt).split()
    if len(cmds):
        if (os.fork() == 0):
            # Child process
            os.execv(cmds[0], cmds)
        else:
            # Parent process
            # (Hint: You don't have to wait, you can just exit here.)
            os.wait()
于 2013-09-14T22:27:55.730 に答える
1

os.system から呼び出されたときにコマンドの後に & を配置すると、うまくいきませんか? 例えば:

import os
os.system( "google-chrome & disown " )
于 2013-09-14T22:15:03.107 に答える