は、私はコマンドラインから実行したときに私のプログラム 輸入サブプロセス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
これは私が必要とするものです。私はチェックマークをクリックします! (それはまだ、3分の時間制限についての何か、あなたは高速です!)申し訳ありません私は実行するためにルートアクセスが必要な他のプログラムでSCAPYを使用しています、これは私が見つけることができる最高の回避策ですたくさん。 –
BTW2:サブプロセスモジュールの通信メソッドを見てください。 –
実行しているコマンドが多分時間がかかる場合は、ソケットサービスを書くことができます。要求を送信するデータが必要な場合、サービスはセッションIDとデータを返しません。次に、Webページ(javascriptまたはredirect)から、準備が整うまでそのセッションからの出力を求めるポーリングを行います。この方法では、Webスクリプトは3分間の実行を必要としません。ええ、もう少し複雑ですが...他の解決策はこの上限をApacheで増やしています。 –