Windows文件重定向在python脚本中不起作用

Windows文件重定向在python脚本中不起作用,python,windows,Python,Windows,下面一行python代码打开一个新的windows cmd提示符并执行ipconfig命令,但无法将输出重定向到我给它的文件 os.system("start cmd /k ipconfig > {file_name}") 如果我直接在cmd提示符中执行相同的命令,则重定向没有问题。知道为什么会失败吗?如果我在命令提示符下键入此命令 start cmd /k ipconfig > {file_name} ipconfig > {file_name} 它不会重定向ipcon

下面一行python代码打开一个新的windows cmd提示符并执行ipconfig命令,但无法将输出重定向到我给它的文件

os.system("start cmd /k ipconfig > {file_name}")

如果我直接在cmd提示符中执行相同的命令,则重定向没有问题。知道为什么会失败吗?

如果我在命令提示符下键入此命令

start cmd /k ipconfig > {file_name}
ipconfig > {file_name}
它不会重定向ipconfig的输出。它打开一个新控制台,并在该控制台中运行ipconfig,将输出发送到屏幕。start本身不生成输出,因此>将不存在的输出从start重定向到{filename},并创建一个零字节的输出文件

要使用start执行重定向,需要将>与ipconfig关联,如下所示:

start cmd /k "ipconfig > {file_name}"
但是,如果您计划从Python程序调用shell,打开控制台窗口并将其留在那里通常并不方便。如果在命令提示符下键入此更简单的命令

start cmd /k ipconfig > {file_name}
ipconfig > {file_name}
正如你所描述的那样。同样地

os.system(r"ipconfig > C:\users\.blah.\{file_name}")
将在Python中工作,但您需要指定输出文件的路径,因为否则os.system可能会尝试将文件发送到默认位置,而您不允许写入该位置,因为它是程序文件的子文件夹。使用r字串,这样你就不会有重复反斜杠的麻烦


并考虑使用子进程模块优先于OS .St../P>。运输署;DR:使用subprocess而不是os.system,如中所述。@Graipher不,如果没有对format的调用,则不会。大括号是按字面解释的,{file_name}在Windows中是一个有效的文件名(如果是特殊的话);因此,我会在你描述的那部分工作时不那么自信。子流程是要走的路。@etene真的,哪一条?我想我已经在所有这些系统中工作过了,回到了16位Windows3.1。发现重定向在Windows中不起作用的人通常会在不知情的情况下将>作为参数传递给ShExecInfo.lpParameters中的可执行文件,并期望程序处理它。是的,这确实是我的一个误解,我无法检查,因为我手边没有Windows机器,所以看起来是这样的。谢谢你纠正我!在Windows shell中,在重定向和管道方面最奇怪的是PowerShell。它将自己设置为中间人,进行文本模式解码和编码以及LF= > CRLF翻译。当您希望在PowerShell中使用二进制管道和重定向时,最简单的答案是运行cmd.exe/c…@eryksun PowerShell,因为它在Windows下运行的不是Windows shell。Windows Shell有点像Unix Shell,它允许进程通过管道将ascii流相互传输。PowerShell管道完全不同。它们将.net对象从一个进程输送到下一个进程。如果目标进程是控制台,则会看到对象的文本表示,这与要求Python解释器向您显示列表时发生的情况非常相似。PowerShell很聪明,可以非常强大,但对于非程序员来说很难。这就是为什么它的大部分目标市场仍然使用.bat文件。