3

ここの初心者。任意の助けをいただければ幸いです..

tcp pcap 診断ツールを実行する cgi スクリプトを作成しています。コマンドを bash で実行すると、次のようになります。

/home/fsoft/cap/capnostic -r 38350 /home/fsoft/brad.pcap > 38350

だから私はPythonでそれをやろうとしています:

output = os.system('/home/fsoft/cap/capnostic -r' + port + directory+filename '>' + jobdir+filename

「>」が混乱しているように感じます..しかし、正しい構文を見つけることができないようです..また、コマンドを正しく取得すると、出力変数を出力できますか?

 print '%s' % (output)

出力は 3 ページのデータである可能性があります。

助けてくれてありがとう。

ここに私の完全なコードがあります:

#!/usr/bin/env python

import cgi, os
import cgitb; cgitb.enable()
import subprocess


form = cgi.FieldStorage()
port = form.getvalue("port")
filename = form.getvalue("filename")
directory = form.getvalue("directory")
jobdir = '/var/www/jobs/' + filename


def createdir():
 os.system('mkdir /var/www/jobs/' + filename)
createdir()

def capout():
 output = os.system('/home/fsoft/cap/capnostic -r %s %s%s > %s%s' % (port, directory,     filename, jobdir, filename))
capout()

def htmlout():
 print 'Content-type: text/html\n'
 print '<html>'
 print '<head>'
 print '<title>Capnostic Output</title>'
 print '</head>'
 print '<body>'
 print '<BR><BR><BR><center>'
 print '<table border=0>'
 print '<TR>'
 print '<TD><center>port = %s<BR>filename = %s<BR>Directory = %s<BR>Job Directory = %s</TD>' % (port,filename,directory,jobdir)
 print '</TR>'
 print '</table>'
 print '<BR><BR><BR>'
 print '%s' % (output)
 print '</body>'
 print '</html>'

htmlout()

それは今私に言っています:

<type 'exceptions.NameError'>: global name 'output' is not defined 
  args = ("global name 'output' is not defined",) 
  message = "global name 'output' is not defined"
4

2 に答える 2

3

+文字列と文字列間のスペースを連結するための a がありません。文字列の書式設定を使用してタスクを簡素化するか+、必要に応じて a とスペースを追加できます。

output = os.system('/home/fsoft/cap/capnostic -r %s %s%s > %s%s' % (port, 
                   directory, filename, jobdir, filename))

注: %s は、各変数を文字列として扱うために使用されます。

os.systemの使用はsubprocessモジュールに置き換えられます。

sts = os.system("mycmd" + " myarg")
# becomes 
sts = call("mycmd" + " myarg", shell=True)

出力をキャプチャするにはPopen、次のように変換されるを使用する必要があります。

def capout():
   cmd = '/home/fsoft/cap/capnostic -r %s %s%s > %s%s' % (port, 
                       directory, filename, jobdir, filename)
   process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
   output, error = process.communicate()
   return output

output = capout()
于 2012-08-10T18:53:20.290 に答える
2

+の前にがありません'>'

cmd = ('/home/fsoft/cap/capnostic -r' + port + directory + filename + '>' + 
        jobdir + filename)

os.system(cmd)

os.systemコマンドの出力を返さないことに注意してください。これを取得する方法は次のとおりです。

import subprocess

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
output, error = proc.communicate()
print output
于 2012-08-10T18:49:49.043 に答える