2012-03-10 2 views
0

Unixシステムでは、Pythonスクリプト内で端末ウィンドウを開いて起動しようとしていますサーバー。 Pythonにはこのようなことを可能にするサブプロセスモジュールがあります。だから、:パーミッションエラー:Pythonスクリプト内で、私はUnixシステムでサーバファイルを見つけてそれを開いてユーザのコマンドを実行する必要があります

import subprocess 
subprocess.Popen(['path to terminal']) 

リターン:

OSError: [Errno 13] Permission denied 

は、どのように私はこれは正しい権限で実行していますか?あるいは、私が必要とすることをより良く安全にする方法がありますか?

私はプログラミングが比較的新しいので、私の質問が間違っている場合は、議論の方向を変えてください。ありがとうございました!

+3

「パスtoターミナル」のパーミッションは何ですか?つまり、 'ls -l 'と' terminal'の間に '' ls -l 'と入力すれば、何が見えますか? – ruakh

+0

申し訳ありませんが、私はこれがJohanが求めていたことを今すぐ認識しました: 'drwxr-xr-x 8 root wheel 272 2月3 16:50目次/' –

+0

答えはroot権限です。 –

答えて

4

編集:あなたは明らかにはMac OS Xを実行しているので、あなたは、あなたが/Applications/Utilities/Terminal.appを実行したいと述べている

のMac OS X用の.appプログラムディレクトリです。 Mac OSのシェルコマンドopenで起動できます。新鮮マックスOSのターミナルセッションでプログラム/パス/に/サーバーを開くには

import subprocess 
termapp=['open','-a','/Applications/Utilities/Terminal.app'] 
sp=subprocess.Popen(termapp+['/path/to/server']) 

は、端末のシェルコマンドのバージョンもありますので、あなたはopen -aは必要ありません。

import subprocess 
termapp=['/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal'] 
sp=subprocess.Popen(termapp+['/path/to/server']) 

2つの方法は、ウィンドウがウィンドウマネージャによってどのようにグループ化されるかに微妙な違いがあります。上記の操作を行うたびに、別の端末プロセスと別のアイコンがトレイに表示されます。 -aを指定すると、同じターミナルのメインプログラム内に新しいウィンドウが開きます。

+0

は、あなたをありがとう応答。ここで私は必要なの端末へのパスです: '/アプリケーション/ユーティリティ/ Terminal.app' 私はあなたの上記の提案を試みたが、これは私が得たものである: [67]で :subprocess.Popen([ 'bashの/アプリケーション/ユーティリティ/ Terminal.app ']、シェル=真) アウト[67]:で [68]:/Applications/Utilities/Terminal.app:/Applications/Utilities/Terminal.app:これはOPの問題を解決するかどうかわからないディレクトリ –

+0

ですが、使用して 'シェル= true'には、セキュリティ上の理由には本当に悪いです。 (http://docs.python.org/library/subprocess.html#subprocess.Popen)[強く推奨] – aland

+0

私のコメントがされているよう 'と' - subprocess.Popen([ 'L' 'LSを'、])を使用して、全く読めない... –

関連する問題