python: 无法打开文件 'python DACscrap.py &': [Errno 2] 没有那个文件或目录...但是它有吗?

python: can't open file 'python DACscrap.py &': [Errno 2] No such file or directory... but it does?

我的代码现在只有 400 多行,我不希望得到答案,而是得到一些可能出错的建议。在我的程序中,我启动了一个子进程:

#out_select is a variable that defaults to the AD9850 control program
#and is switched to the sinetable program with the valve_select command.
subprocess.call(out_select, shell=True)
#The following lines are used to find the PID of the program used for output
#and save it for the stop command to kill that PID.
sp = subprocess.Popen(['python',out_select])
end_sine = int(sp.pid)-1
print end_sine
#end = str(end_sine)

这是通过 tkinter 按钮命令启动的。该程序确实在后台启动,但我 .当我启动命令(通过单击按钮)时,我在 LXTerminal 中收到以下错误消息:

python: can't open file 'python DACscrap.py &': [Errno 2] No such file or directory

或取决于命令 out_select:

python: can't open file 'sudo python AD9850_GUI.py &': [Errno 2] No such file or directory

这两个程序 运行 都很好,经示波器验证,我能够 return 到程序并使用其他按钮小部件。挂断是程序中有一个图表,我无法通过 USB 端口从 arduino 发送值。这不是 arduino,因为该图将绘制一个零值。关于问题可能出在哪里的任何建议?如果不是这里的几行那么我可以在其他地方做点什么吗?

错误消息意味着您尝试开始使用 sp = subprocess.Popen(['python',out_select])python 可执行文件找不到包含在 out_select 变量中的文件名(事实上,它非常您不太可能将 Python 脚本存储在名为:'python DACscrap.py &' 的文件中。

尝试熟悉 运行 外部流程:

  • 不要使用 shell=True 到 运行 单个命令。改为传递列表
  • 不要使用&(Popen不等待命令退出)

例如,代替 call("cmd 'arg 1' arg2 &", shell=True),使用:

p = Popen(['cmd',  'arg 1',  'arg2'])
# ... do something else
p.wait() 

导入 Python 模块并调用相应的函数可能比 运行 使用 subprocess 将 Python 文件作为脚本更方便。参见