Linux

Bash 操作員 & 不工作

  • March 8, 2019

根據 bash 參考,我們可以通過以 & 字元結尾來提供非阻塞命令。但是,當我嘗試以下命令時,它不起作用:

python -m SimpleHTTPServer 8080&

我打算這樣做的原因是我想啟動內置的 python 網路伺服器作為另一個更大的程序的一部分,該程序也是用 python 編寫的。如何在非阻塞/守護程序模式下發出此命令?我什至嘗試在 python 中使用“subprocess.Popen()”來執行這個命令,這也應該創建一個非阻塞程序,但即使這樣也不起作用。

編輯:這是啟動網路伺服器的python程式碼部分(添加’nohup’似乎可以解決問題):

pid_webserver = execute("nohup python -m SimpleHTTPServer 8080 &",wait=False,shellexec= True)
#pid_webserver = execute("python -m SimpleHTTPServer 8080 &",wait=False,shellexec= True)

def execute(command,errorstring='', wait = True, shellexec = True):
   try:
       print 'command=' + command
       p=subprocess.Popen("gksu '" + command + "'", shell=shellexec,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
       if wait:
           p.wait()
           result=get_stdout(p)
           return result
       else:
           print 'not waiting'
           return p
   except subprocess.CalledProcessError as e:
       print 'error occured:' + errorstring
       return errorstring

&作品。但我認為您正在尋找的是nohup python -m SimpleHTTPServer &.

但我認為你也應該看看http://docs.python.org/2/library/simplehttpserver.html

‘&’ 在這裡不起作用…它是一個 bash 運算符,在您的腳本中,您沒有使用 bash 來執行命令,而是從 python 腳本執行它 - 這就是它永遠不會起作用的原因。

嘗試 :

import os
os.system("python -m SimpleHTTPServer 8080 &")

引用自:https://unix.stackexchange.com/questions/83235