2017-08-31 3 views
1

ProcessBuilderを使用してJavaからPythonスクリプトを実行しようとしています。スクリプトにはPython 3が最低限必要です。私はこのようにそれを呼んでいる:Mac OSXのJava ProcessBuilderにPython 3が表示されない

// the -u is for unbuffered output 
String[] pythonCommand = {"python", "-u", "script.py"}; 
ProcessBuilder ps = new ProcessBuilder(pythonCommand); 
Process pr = pb.start(); 

それはWindows上で完全に正常に動作し、私はsys.version_infoとPythonのバージョンをプリントアウトするscript.pyを定義する場合、それは、私は、Python 3.6.2

実行していることを私に伝えます

しかし、私の友人のMacbookでは、スクリプトは動作せず、sys.version_infoはPython 2.7.1を示しています。彼女はbrew install python3の自作を使ってPython 3をインストールしました。端末からpython3 scriptname.pyを実行すると、Python 3.6.2で実行されますが、python scriptname.pyはTerminalからPython 2.7.1で動作します。そのための

、私はOS名がWindowsに起動しませんが、そのコマンドは、Mac上でJavaのProcessBuilderをから動作しない場合、私はちょうど

String[] pythonCommand = {"python3", "-u", "script.py"}; // python3 

するJavaのProcessBuilderをコマンドを変更することができると思いましたOS-it throws

java.io.IOException: Cannot run program "python3": error=2, No such file or directory 

これは、ProcessBuilderがPythonを実行するために使用しているパスに問題があると考えています。おそらく、MacでPython 3を実行するためにvirtualenvを使用する必要があるかもしれませんが、その方法を知りません。それとも、まったく違うものかもしれませんか?

答えて

0

私はPythonとすべての必要なモジュールがユーザーのコンピュータにインストールされているので、このアプローチから完全に離れることになりました。代わりにPythonスクリプトをPyinstallerで実行可能ファイルにパッケージ化し、Javaリソースフォルダに入れ、コンパイルされた実行ファイルをJava ProcessBuilderから呼び出しました。

0

Homebrewが実際のpython3実行ファイルをPATHにあるディレクトリにリンクするとは限りません。これは端末で確認する必要があります。私のMacBook上で

リンクは、あなたがそれを作成するためのコマンドbrew link python3 を使用することができます欠落している場合のpython3が/usr/local/bin/python3

[email protected] ~> ls -l /usr/local/bin/python3 
lrwxr-xr-x 1 xvolks admin 35 19 aoû 00:02 /usr/local/bin/python3 -> ../Cellar/python3/3.6.2/bin/python3 

にリンクされています。

+0

これを実行すると、Celler/python3のPython 3を '/ usr/local/bin/python3'フォルダの代わりに '/ usr/local/bin/2to3-3.6'フォルダにリンクしようとします。 「2to3-3.6」フォルダがすでに存在していたため、失敗しました。 –

+0

それでは、 'ln -s ... 'コマンドで端末にリンクを作成しようとしてください。 – Xvolks

+0

これは最善の解決策ではないかどうかは分かりません。私たちは、Windows、Linux、MacでPython 3でプロジェクトスクリプトを実行できる簡単な方法を探しています。それは、私たちが使用するすべてのUnixシステムを潜在的に処理するための不要な作業であるようです。私はpipenvを使ってプロジェクトの仮想環境でPythonを実行しようとしています。 –

関連する問題