在后台运行命令

我正在使用python subprocess模块​​来运行一些命令并将其输出存储在后台。 该命令部署在我的机器上。 现在,每当我从shell提示符运行命令,它工作正常。 但是当我尝试使用子进程模块运行相同的命令时,它会产生以下错误

要执行的命令是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

任何人都可以帮我解决这个错误。 任何建议都会有所帮助。 提前致谢

Tazim


问题可能是由于bash shell在&后立即终止并将SIGHUP信号发送给它的所有子进程(标准shell行为)。

您可以使用子tmp.txt模块直接执行命令,并可以通过首先打开文件,然后将文件句柄传递给tmp.txt调用的stdout参数,将输出重定向到tmp.txt


尝试将其更改为['vxswadm', 'listswitch', 'all', '>', 'tmp.txt','&']和/或将shell更改为False

我认为这可能是壳牌,尽管(如果修复它)。

您也可以尝试添加stdin=subprocess.PIPE, stdout=subprocess.PIPE ,但我怀疑这会影响它。


os.getlogin()和subprocessing和python有问题。 请参阅http://code.activestate.com/lists/python-list/288845/

你需要使用其他的东西,比如:

pwd.getpwuid(os.getuid()).pw_name (仅适用pwd.getpwuid(os.getuid()).pw_name Unix)

另请参阅以便携方式获取用户名的讨论。

链接地址: http://www.djcxy.com/p/79437.html

上一篇: running command in background

下一篇: Get parent user after sudo with Python