python os.system错误:“;全球名称';输出';“未定义”;

python os.system错误:“;全球名称';输出';“未定义”;,python,os.system,Python,Os.system,我是新手。任何帮助都将不胜感激 我正在编写一个运行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+

我是新手。任何帮助都将不胜感激

我正在编写一个运行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()
#/usr/bin/env python
导入cgi,操作系统
进口cgib;cgib.enable()
导入子流程
form=cgi.FieldStorage()
端口=form.getvalue(“端口”)
filename=form.getvalue(“文件名”)
directory=form.getvalue(“目录”)
jobdir='/var/www/jobs/'+文件名
def createdir():
os.system('mkdir/var/www/jobs/'+文件名)
createdir()
def capout():
output=os.system('/home/fsoft/cap/capnostic-r%s%s%s>%s%s'(端口、目录、文件名、作业目录、文件名))
capout()
def htmlout():
打印“内容类型:text/html\n”
打印“
打印“
打印“容量输出”
打印“
打印“
打印“


” 打印“ 打印“ 打印“端口=%s
文件名=%s
目录=%s
作业目录=%s%”(端口、文件名、目录、作业目录) 打印“ 打印“ 打印“


” 打印“%s%”(输出) 打印“ 打印“ htmlout()
它现在告诉我:

<type 'exceptions.NameError'>: global name 'output' is not defined 
  args = ("global name 'output' is not defined",) 
  message = "global name 'output' is not defined"
:未定义全局名称“output”
args=(“未定义全局名称‘输出’,)
message=“未定义全局名称“输出”

'>'

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

您缺少用于连接字符串和字符串之间空格的
+
。您可以使用简化任务,也可以在需要时添加
+
和空格:

output = os.system('/home/fsoft/cap/capnostic -r %s %s%s > %s%s' % (port, 
                   directory, filename, jobdir, filename))
注意:%s用于将每个变量视为字符串

的使用将替换为模块:

要捕获输出,您需要使用,其转换如下:

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()

打印'%s'(输出)
可能是多余的。如果你能做到这一点,你应该能够只做
打印输出
;使用该模块比使用操作系统功能更可取注意,它不会得到命令的输出,它只会给出返回代码,用户确实指定他希望有几页数据作为输出。谢谢大家的帮助。我往前走了一点。。b但是现在它告诉我::全局名称'output'未定义args=(“全局名称'output'未定义”),message=“全局名称'output'未定义”是您的范围<当您试图在
htmlout()
函数中调用它时,code>output不存在。谢谢RobB,我已经习惯了bash。我在前面的代码中定义了“output”,您说的是htmlout()不知道在代码的前面定义了输出?您执行了分配变量的函数,但只针对该函数的局部范围。我已经更新了我的答案,以显示如何正确访问它。
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()