How do you display stdout on a web page generated by Python?
我正在编写一个Web应用程序,它将在本地Windows服务器上执行命令并需要显示输出。 我的代码中的Popen()调用在Python解释器上执行正常,但在通过IIS执行时会出现令人讨厌的错误。 谢谢!!!!
错误文字:
Traceback (most recent call last):
File"C:\pythonapps\mystdout.py", line 9, in print Popen('ipconfig',
shell=True, stdout=PIPE).communicate()[0]File"C:\Python27\lib\subprocess.py", line 672, in init errread,
errwrite) = self._get_handles(stdin, stdout, stderr)File"C:\Python27\lib\subprocess.py", line 774, in _get_handles
p2cread = _subprocess.GetStdHandle(_subprocess.STD_INPUT_HANDLE)WindowsError: [Error 6] The handle is invalid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from subprocess import * print"Content-type:text/html " print"<html>" print"<head>" print"FSPCT app" print"</head>" print"<body>" print Popen('ipconfig', shell=True, stdout=PIPE).communicate()[0] print"</body>" print"</html>" |
stdin的默认subprocess.Popen()值是
要使用内部标准输入,只需通过
1 | print Popen('ipconfig', shell=True, stdin=PIPE, stdout=PIPE).communicate()[0] |
看起来IIS服务器没有有效的stdin文件句柄(并不是那么令人惊讶,因为它是一个服务器进程)。
要解决此问题,请使用绑定到NUL文件的stdin文件句柄(也可能是stderr以获得良好的度量)调用
尝试像这样修改你的代码:
1 2 3 4 | import os ... with open(os.devnull, 'r+') as nul: print Popen('ipconfig', shell=True, stdin=nul, stdout=PIPE, stderr=nul).communicate()[0] |
(在即将发布的Python 3.3中,您现在可以将subprocess.DEVNULL传递给Popen的stdin,stdout或stderr参数,以便更简洁地执行相同的操作。)