以下python代码行打开一个新的windows cmd提示符并执行ipconfig命令,但无法将输出重定向到我提供的文件。
os.system("start cmd /k ipconfig > {file_name}")
如果我直接在cmd提示符中执行相同的命令,则重定向没有问题。知道为什么会失败吗?
答案 0 :(得分:1)
如果我在命令提示符下键入此命令
start cmd /k ipconfig > {file_name}
没有重定向ipconfig
的输出。它打开一个新的控制台,在该控制台中运行ipconfig
,将输出发送到屏幕。 start
不会生成自己的输出,因此>
会将不存在的输出从start
重定向到{filename}
,并创建一个零字节输出文件。
要使用start
进行重定向,您需要将>
与ipconfig
关联起来,如下所示:
start cmd /k "ipconfig > {file_name}"
但如果您计划从Python程序调用shell,那么打开控制台窗口并将其保留在那里通常并不方便。如果我在命令提示符下键入这个更简单的命令
ipconfig > {file_name}
它按照你的描述工作。同样,
os.system(r"ipconfig > C:\users\.blah.\{file_name}")
将在Python中工作,但您需要指定输出文件的路径,否则os.system()
可能会尝试将文件发送到您不允许写入的默认位置(因为它是Program Files
)的子文件夹。使用r
- 字符串,这样您就不会有加倍反斜杠的麻烦。
并考虑优先使用subprocess
模块os.system
。