授予http://docs.python.org/library/subprocess.html。
communication()返回一个元组(stdoutdata,stderrdata)。
子流程完成后,您可以从Popen实例获取返回代码:
Popen.returnpre:子返回码,由poll()和wait()设置(并由communication()间接设置)。
同样,您可以实现以下目标:
sp = subprocess.Popen([executable, arg1, arg2], stdout=subprocess.PIPE, stderr=subprocess.PIPE)out, err = sp.communicate()if out: print "standard output of subprocess:" print outif err: print "standard error of subprocess:" print errprint "returnpre of subprocess:"print sp.returnpre
顺便说一句,我会改变测试
if script.endswith('.*~') or script == 'README': continue
变成一个积极的:
if not filename.endswith(".sh"): continue
另外,您应该以更通用的方式命名变量,因此
script应该
filename放在首位。由于
listdir还列出了目录,你可以明确地检查这些。
try/except只要您不处理特定的异常,当前的块就不合适。取而代之的是
abspath,您应该只连接
initdir和
filename,这是一个经常在上下文中应用的概念
os.listdir()。出于安全原因,仅在绝对确定需要时才
shell=True在
Popen对象的构造函数中使用它。让我提出以下建议:
for filename in sorted(os.listdir(initdir), reverse=reverse): if os.path.isdir(filename) or not filename.endswith(".sh"): continue if os.access(script, os.X_OK): exepath = os.path.join(initdir, filename) sp = subprocess.Popen( (exepath, 'stop' if reverse else 'start'), stderr=subprocess.PIPE, stdout=subprocess.PIPE) out, err = sp.communicate() print out, err, sp.returnpre
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)