在后台执行命令

1 投票
3 回答
1708 浏览
提问于 2025-04-16 00:02

我想用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)

撰写回答