Python 在后台运行命令
我正在使用python子流程模块运行一些命令,并将其输出存储在后台。该命令已部署在我的计算机上。现在,无论何时从shell提示符运行命令,它都可以正常工作。但当我尝试使用subprocess模块运行相同的命令时,它会给出以下错误 要执行的命令是Python 在后台运行命令,python,django,Python,Django,我正在使用python子流程模块运行一些命令,并将其输出存储在后台。该命令已部署在我的计算机上。现在,无论何时从shell提示符运行命令,它都可以正常工作。但当我尝试使用subprocess模块运行相同的命令时,它会给出以下错误 要执行的命令是vxswadm listswitch all process = subprocess.Popen('vxswadm listswitch all > tmp.txt &',shell=True) >>>
vxswadm listswitch all
process = subprocess.Popen('vxswadm listswitch all > tmp.txt &',shell=True)
>>> Traceback (most recent call last):
File "/usr/bin/vxswadm", line 30, in <module>
l.uname = os.getlogin()
OSError: [Errno 25] Inappropriate ioctl for device
process=subprocess.Popen('vxswadm listswitch all>tmp.txt&',shell=True)
>>>回溯(最近一次呼叫最后一次):
文件“/usr/bin/vxswadm”,第30行,在
l、 uname=os.getlogin()
OSError:[Errno 25]设备的ioctl不正确
有人能帮我解决这个错误吗。任何建议都会有帮助。提前谢谢
Tazim尝试将其更改为
['vxswadm','listswitch','all','>','tmp.txt','&']
和/或将shell更改为False
不过,我认为可能是外壳的问题(如果可以解决的话)
您也可以尝试添加
stdin=subprocess.PIPE,stdout=subprocess.PIPE
,尽管我怀疑这会影响它。问题可能是由于bash shell在&
之后立即终止,并将SIGHUP信号发送到它的所有子进程(标准shell行为)
您可以使用subprocess模块直接执行命令,并可以通过首先打开文件,然后将其文件句柄传递给Popen调用的
stdout
参数,将输出重定向到tmp.txt
。os.getlogin()和subprocessing与python存在问题。
看
您需要使用其他工具,例如:
pwd.getpwuid(os.getuid()).pw_name
(仅限Unix)
另请参见。它可能是您处理标准输出的方式,也可能是标准输出本身发生的错误。您是否能够在python之外成功地自行运行该命令?yes命令在shell提示符下正常工作