2012-01-18 3 views
0

は、私はコマンドラインから実行したときに私のプログラム 輸入サブプロセスsubprocess.Popenコマンドの出力をWebページに取得しますか?ここでは(多分apacheの問題)

print "Content-type:text/html\r\n\r\n" 
print "File starting to execute" 
print "<br>" 
proc = subprocess.Popen(["sudo", "python", "test3.py"], stdout=subprocess.PIPE) 
output = proc.stdout.read() 
print "output is %s" %output 

print "<br>" 
print "File Executed Awesomely" 

だから、それはfollows-のように、素晴らしい作品です>

[[email protected] html]# python test2.py 
Content-type:text/html 


File starting to execute 
<br> 

output is . 
Sent 1 packets. 

<br> 
File Executed Awesomely 
[[email protected] html]# 

完璧であることmsgstr "1個のパケットを送信しました。"私が欲しいものです。しかし、私はWebページからそれを実行すると、Webページだけで

​​

を持っているので(私の他のプログラムには、送信を呼び出して、私は出力をつかん何か間違ったことをやっていたので、私はもともと、これはと思ったが、私はwiresharkののポートに耳を傾けパケット)、それはウェブページ呼び出しでパケットが現れないように見えますが、コマンドラインで呼び出すと同じことが起こります。私はそれを修正することができますどのように私のapache error_log->

[Wed Jan 18 18:15:11 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Wed Jan 18 18:15:11 2012] [notice] Digest: generating secret for digest authentication ... 
[Wed Jan 18 18:15:11 2012] [notice] Digest: done 
[Wed Jan 18 18:15:11 2012] [warn] ./mod_dnssd.c: No services found to register 
[Wed Jan 18 18:15:11 2012] [notice] Apache/2.2.17 (Unix) DAV/2 configured -- resuming normal operations 

任意の提案を見てみるので、私のApacheのcgi-binスクリプトは、コマンドラインと同じように動作しますか?

EDIT:それはこの繰り返し

[Wed Jan 18 18:22:37 2012] [error] [client 10.117.153.89] : 
[Wed Jan 18 18:22:37 2012] [error] [client 10.117.153.89] sorry, you must have a tty to run sudo 

答えて

1

メッセージsorry, you must have a tty to run sudoを行い、いくつかのコールの後にログを見ているが重要です。まず第一に、あなたのApacheをsudoを実行させることは危険なことですが、実際にやりたければ... /etc/sudoers()を編集し、Defaults requirettyの部分(man sudoers)を見つけてください。

注意:sudoを使って何かを実行させてはいけません。何をする必要があるのか​​を正確に指定してください!

BTW:SELinux対応または他のLSMモジュールをお持ちの場合、まだ動作しないことがあります。

+0

これは私が必要とするものです。私はチェックマークをクリックします! (それはまだ、3分の時間制限についての何か、あなたは高速です!)申し訳ありません私は実行するためにルートアクセスが必要な他のプログラムでSCAPYを使用しています、これは私が見つけることができる最高の回避策ですたくさん。 –

+0

BTW2:サブプロセスモジュールの通信メソッドを見てください。 –

+0

実行しているコマンドが多分時間がかかる場合は、ソケットサービスを書くことができます。要求を送信するデータが必要な場合、サービスはセッションIDとデータを返しません。次に、Webページ(javascriptまたはredirect)から、準備が整うまでそのセッションからの出力を求めるポーリングを行います。この方法では、Webスクリプトは3分間の実行を必要としません。ええ、もう少し複雑ですが...他の解決策はこの上限をApacheで増やしています。 –

関連する問題