我一直在 Windows 上运行一些 python 代码,它使用以下行打开另一个 python 程序“main_plot.py”...
subprocess.Popen(['C:\\python26\\python.exe ','main_plot.py','-n', str(number_of_cores),'-m', str(number_of_motors)])
我尝试通过 ssh 连接到 Mac OS 电脑来运行相同的代码,但它不起作用,因为我认为我需要更改路径。这是我的第一个猜测...
subprocess.Popen(['python','main_plot.py','-n', str(number_of_cores),'-m', str(number_of_motors)])
但我收到错误... python:无法打开文件“main_plot.py”:[Errno 2]没有这样的文件或目录
我也尝试过
subprocess.Popen(['python','~/code/stochastic/main_plot.py','-n', str(number_of_cores),'-m', str(number_of_motors)])
但我遇到了同样的错误。
我已经检查过该文件位于“~/code/stochastic”中,确实如此。我有点不知道下一步该做什么
最佳答案
问题不在于 Windows 和 Mac 之间的差异,而在于 Windows 和 Mac 之间的差异。这是因为您仅在 Mac 上使用 ~
,并且不能在路径名中使用 ~
。
换句话说,~/code/stochastic/main_plot.py
不是真正的路径名,或者更确切地说,它是,但它正在寻找名为 ~
的目录code> 在当前目录下,而不是您的主目录下。 shell 使用波形符扩展将其转换为真实的路径名。 Python 也可以进行波形符扩展,但您必须明确要求它这样做。
所以,解决方案很简单:
subprocess.Popen(['python',
os.path.expanduser('~/code/stochastic/main_plot.py'),
'-n', str(number_of_cores),'-m', str(number_of_motors)])
正如 Jeremy Roman 在评论中指出的那样,如果使用 shell=True
,则可以在路径中使用 ~
,因为这样 Python 就会将所有参数放在一起传递到 shell 的命令行中,shell 确实会处理 ~
。但你不想这样做。只需调用expanduser
即可。
为了将来的引用,对于 shell 所做的所有其他类型的扩展来说,同样的情况也是如此。您不能执行"${HOME}/foo"
,但可以执行os.path.expandvars("${HOME}/foo")
。你不能这样做 "foo$((1+1))bar"
;你必须做类似 "foo%sbar"% (1+1,)
的事情。等等。
关于python - subprocess.Popen 在 Windows 和 Mac OS 之间有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13753001/