Python 在后台运行命令

Python 在后台运行命令,python,django,Python,Django,我正在使用python子流程模块运行一些命令,并将其输出存储在后台。该命令已部署在我的计算机上。现在,无论何时从shell提示符运行命令,它都可以正常工作。但当我尝试使用subprocess模块运行相同的命令时,它会给出以下错误 要执行的命令是vxswadm listswitch all process = subprocess.Popen('vxswadm listswitch all > tmp.txt &',shell=True) >>>

我正在使用python子流程模块运行一些命令,并将其输出存储在后台。该命令已部署在我的计算机上。现在,无论何时从shell提示符运行命令,它都可以正常工作。但当我尝试使用subprocess模块运行相同的命令时,它会给出以下错误

要执行的命令是
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提示符下正常工作