这是我想在cmd中使用python运行的代码,我想让它返回我在程序中继续执行的数据
SCHTASKS /query /TN TaskName >NUL 2>&1
如您所见,如果找不到TaskName,此代码可能会返回false值。
我想得到这样的数据,即:如果任务确实存在,我需要返回一些错误代码,并且当它存在时需要获得不同的返回代码。
我尝试使用
var=subprocess.Popen(["start", "cmd", "/k", "SCHTASKS /query /TN TaskName >NUL 2>&1"], shell = True)
print var
但这只是给了我一些记忆中的对象位置。由于这是使用cmd的帮助,因此似乎需要使用不同的语法来返回。
答案 0 :(得分:1)
请勿使用start
在后台启动,因为您无法获得返回代码或输出。
如果您只想要命令的返回码并隐藏输出/错误消息,只需创建一个Popen
对象,然后等待任务完成:
p = subprocess.Popen(["SCHTASKS","/query","/TN","TaskName"],stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return_code = p.wait()
Python 2没有DEVNULL
,因此您必须手动打开空流(How to hide output of subprocess in Python 2.7):
with open(os.devnull, 'w') as FNULL:
p = subprocess.Popen(["SCHTASKS","/query","/TN","TaskName"],stdout=FNULL, stderr=FNULL)
return_code = p.wait()
如果你需要在后台执行此操作,请将以上代码包装在python线程中。也:
start
,因为你失去了对这个过程的控制权。它的返回码。 shell=True
,因为使用Popen
重定向到DEVNULL
更具便携性。