“pwd”在运行python子进程时在Windows机器上给出路径

时间:2015-07-02 18:26:01

标签: python subprocess windows-7-x64

我编写了以下名为file_I_executed.py的脚本:

import subprocess
def main():
    loc = subprocess.popen("pwd")
    print loc

提供了输出:

C:\Python27\python.exe C:/Users/username/PycharmProjects/projectname/file_I_executed.py

但是,当我在Windows cmd上尝试“pwd”时,我得到:

C:\Users\username\somedirectory>pwd
'pwd' is not recognized as an internal or external command,
operable program or batch file.

是什么给出的?子进程是如何工作的?为什么“pwd”给了我python路径以及脚本的路径,当我从windows命令行运行它时它显然不应该给我这个?

我在Windows 7上使用来自pycharm的python 2.7.1。

澄清:我完全清楚“pwd”不是Windows命令。但是,上面显示的脚本给了我指示的结果,我不明白为什么。

3 个答案:

答案 0 :(得分:3)

在PyCharm下运行程序时看到的输出不是来自subprocess.popen("pwd")调用。事实上,这个电话根本就没有被执行过!

您有一个main功能,但您没有任何调用的代码 main()

输出只是PyCharm启动程序时的默认打印输出。您将使用空程序获得相同的输出。如果从命令行运行程序,则不会输出。

如果在文件底部添加main()调用,则在尝试执行subprocess.popen("pwd")时会出错,因为没有此类函数。

如果将其更改为正确的subprocess.Popen("pwd"),您将收到没有pwd命令的预期错误。 (感谢anarchos78指出这一点。)

PyCharm有一个集成的调试器,可以帮助解决这样的问题。通过单步执行代码,您可以轻松查看代码的哪些部分已执行。

答案 1 :(得分:2)

pwd是一个linux命令,而不是Windows命令。在Windows中,您可以使用echo %cd%

答案 2 :(得分:1)

来自:https://docs.python.org/3/library/subprocess.html#module-subprocess

  

为了支持各种用例,Popen构造函数(和便捷函数)接受大量可选参数。对于大多数典型用例,其中许多参数可以安全地保留其默认值。最常需要的论点是:

     

所有调用都需要args,它应该是一个字符串或一系列程序参数。通常优选提供一系列自变量,因为它允许模块处理任何所需的转义和引用参数(例如,允许文件名中的空格)。如果传递单个字符串,则shell必须为True(参见下文),否则字符串必须简单地命名要执行的程序而不指定任何参数。

然而,这很奇怪,因为Popen电话实际上应该是大写,就像最近的评论所说的那样。