2

次の行を使用して別のPythonプログラム「main_plot.py」を開くWindowsでいくつかのPythonコードを実行しています...

subprocess.Popen(['C:\\python26\\python.exe ','main_plot.py','-n', str(number_of_cores),'-m', str(number_of_motors)])

同じコードを実行するためにMacOSPCにSSHで接続しようとしましたが、パスを変更する必要があると思うため、機能しません。これが私の最初の推測でした...

subprocess.Popen(['python','main_plot.py','-n', str(number_of_cores),'-m', str(number_of_motors)])

しかし、エラーが発生します... python:ファイルを開くことができません'main_plot.py':[Errno2]そのようなファイルまたはディレクトリはありません

私も試しました

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名前のディレクトリを探しています。~シェルは、チルダ拡張を使用してそれを実際のパス名に変換します。Pythonはチルダ拡張も実行できますが、明示的に実行するように依頼する必要があります。

したがって、解決策は簡単です。

subprocess.Popen(['python',
                  os.path.expanduser('~/code/stochastic/main_plot.py'),
                  '-n', str(number_of_cores),'-m', str(number_of_motors)])

Jeremy Romanがコメントで指摘しているように、を使用する場合はパスで使用できます。これは、Pythonがすべての引数をコマンドラインにまとめてシェルに渡し、シェルを処理するためです。しかし、あなたはそれをしたくありません。だけお電話ください。~shell=True~expanduser

将来の参考のために、シェルが行う他のすべての種類の拡張についても同じことが言えます。できませんが"${HOME}/foo"、できますos.path.expandvars("${HOME}/foo")。あなたはできません"foo$((1+1))bar"; あなたはのようなことをしなければなりません"foo%sbar" % (1+1,)。等々。

于 2012-12-06T21:35:27.167 に答える