在后台运行命令
我正在使用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