当使用python的sh模块(不是stdlib的一部分)时,我可以将路径中的程序作为函数调用并在后台运行它:
from sh import sleep
# doesn't block
p = sleep(3, _bg=True)
print("prints immediately!")
p.wait()
print("...and 3 seconds later")
Run Code Online (Sandbox Code Playgroud)
我可以使用sh的Command包装并传入可执行文件的绝对路径(如果可执行文件不在我的路径中或者包含诸如此类的字符,则会有帮助.):
import sh
run = sh.Command("/home/amoffat/run.sh")
run()
Run Code Online (Sandbox Code Playgroud)
但是尝试在后台运行包装的可执行文件,如下所示:
import sh
run = sh.Command("/home/amoffat/run.sh", _bg=True)
run()
Run Code Online (Sandbox Code Playgroud)
失败并出现回溯错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() got an unexpected keyword argument '_bg'
Run Code Online (Sandbox Code Playgroud)
如何sh.Command在后台运行包装的可执行文件?寻找一个优雅的解决方案.
编辑:
我使用python解释器来测试传递_bg给命令(而不是包装器),我现在意识到这是测试阻塞和非阻塞进程的一种不好的方法:
>>> import sh
>>> hello = sh.Command("./hello.py")
>>> hello(_bg=True) # 5 second delay …Run Code Online (Sandbox Code Playgroud)