2

我一直在 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”中,确实如此。我有点不知道下一步该怎么做

4

1 回答 1

3

问题不在于 Windows 和 Mac 之间的区别。那是您仅~在Mac上使用,而不能~在路径名中使用。

换一种说法,~/code/stochastic/main_plot.py不是真正的路径名——或者更确切地说,它是,但它正在寻找~在当前目录下命名的目录,而不是你的主目录。shell 使用 tilde-expansion 将其转换为真正的路径名。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 会将你所有的 args 放在一个命令行中以传递给 shell,而 shell确实处理~。但你不想那样做。只要打电话expanduser

为了将来参考,shell 所做的所有其他类型的扩展也是如此。你不能做"${HOME}/foo",但你可以做os.path.expandvars("${HOME}/foo")。你不能这样做"foo$((1+1))bar";你必须做类似的事情"foo%sbar" % (1+1,)。等等。

于 2012-12-06T21:35:27.167 回答