是什么在子进程的“壳”的说法意味着在Windows?
-
12-09-2019 - |
题
这“如果壳为真,则指定命令将通过壳执行”为子模块状态的文档。这是什么意思在实践中,在Windows操作系统?
解决方案
当您执行外部程序,你想看起来像“富ARG1参数3”的命令。如果“富”是一个可执行文件,这就是会被执行并且给定的参数。
然而,往往是“富”,实际上是某种类型的脚本,或者可能被内置到shell命令,而不是在磁盘上的实际的可执行文件的情况下。在这种情况下,系统无法执行“foo”的直接原因,严格来说,这些事情是不可执行的。他们需要某种形式的“壳”的执行它们。在* nix系统中,这个壳通常(但不一定)/ bin / sh的。的窗口上它通常将cmd.exe的(或任何存储在COMSPEC环境变量)。
此参数允许您定义什么壳您想用来执行你的命令,为比较少见的情况下,当你不想要的默认。
其他提示
这意味着,该命令将利用在COMSPEC
环境变量指定的程序被执行。一般cmd.exe
。
要准确的说,子过程调用 CreateProcess
Windows API函数,传递"cmd.exe /c " + args
作为lpCommandLine
参数。
如果壳== False时,lpCommandLine
参数给CreateProcess是简单地args
。
除了什么其他的答案说,如果你想在该文件类型的默认查看器中打开一个文件时,它在实践中是有用的。举例来说,如果你想打开HTML或PDF文件,但不知道哪个浏览器或浏览器安装在将运行在系统上,或者没有保证,而该可执行文件的路径,你可以简单地通过文件名作为ARGS领域唯一的参数,然后设置壳=真。这将让Windows使用任何程序与文件类型相关联。 一个警告,如果路径到您的文件中有空格,需要用两到围绕着它。”
例如
path = "C:\\Documents and Settings\\Bob\\Desktop\\New Folder\\README.txt"
subprocess.call('""' + path + '""', shell = True)
可执行参数指定要执行的程序。这是非常很少需要:通常情况下,执行程序是由args参数定义。如果壳=真,可执行参数指定要使用的外壳。在Unix上,默认的shell / bin / sh的。 在Windows中,默认壳由COMSPEC环境变量指定。强>
Windows示例 - 壳(cmd.exe
)命令date -t
不会没有外壳予以确认:
>>> p=subprocess.Popen(["date", "/t"], stdout=subprocess.PIPE)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python26\lib\subprocess.py", line 595, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 804, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
>>>
使用一个外壳,一切都很好:
>>> p=subprocess.Popen(["date", "/t"], shell=True, stdout=subprocess.PIPE)
>>> p.communicate()
('Wed 04/22/2009 \r\n', None)
>>>