在后台执行命令
我想用Python的commands模块在后台执行一个shell命令。
>>>import commands
>>>output = commands.getstatusoutput("find / > tmp.txt &")
sh: Syntax error: ";" unexpected
有没有人能告诉我这个语法有什么问题?那应该怎么执行呢?
谢谢!
3 个回答
1
试着创建一个守护进程,让你的程序在后台运行。
1
我不知道有没有办法直接像那样在后台执行命令。主要是因为命令模块并不是通过bash来运行命令,而bash通常负责解析那个“&”符号。
你应该使用os模块中的fork/exec调用来在后台运行任务。
7
根据getstatusoutput 的文档,commands.getstatusoutput(cmd)
的执行方式是
{ cmd ; } 2>&1
所以你的命令实际上是这样运行的
{ find / > tmp.txt & ; } 2 >& 1
而且在这种命令中,&
后面不能跟;
。
你应该使用subprocess 模块来模拟旧式的os.spawn
命令。
可以尝试
subprocess.Popen("find / > tmp.txt", shell=True)