当前位置: 首页 > 面试题库 >

如何在Python中使用子进程重定向输出?

澹台蕴藉
2023-03-14
问题内容

我在命令行中执行的操作:

cat file1 file2 file3 > myfile

我想用python做什么:

import subprocess, shlex
my_cmd = 'cat file1 file2 file3 > myfile'
args = shlex.split(my_cmd)
subprocess.call(args) # spits the output in the window i call my python program

问题答案:

更新:不鼓励使用os.system,尽管在Python 3中仍然可用。

用途os.system:

os.system(my_cmd)

如果你确实要使用子流程,请使用以下解决方案(大部分内容来自子流程的文档):

p = subprocess.Popen(my_cmd, shell=True)
os.waitpid(p.pid, 0)

OTOH,你可以完全避免系统调用:

import shutil

with open('myfile', 'w') as outfile:
    for infile in ('file1', 'file2', 'file3'):
        shutil.copyfileobj(open(infile), outfile)


 类似资料:
  • 我写了一个程序(myProg.py),它使用子进程模块通过run函数运行其他python程序。我注意到这些其他python程序中的arg in输入(arg)语句没有显示到控制台(stdout),而打印中的arg(args)显示正确。这只发生在我通过控制台运行我的程序时。当我通过LiClipse运行我的程序时,不会发生这种情况。 以下是复制这种情况的最简单方法: 使用python 3.6.2和win

  • 问题内容: 我在Ubuntu上使用,并且有一个Python 2.7脚本可以打印并说出一条消息: 产生所需的声音,但由于一些错误(,没有套接字连接)而使外壳混乱,因此我无法轻松读取之前打印的内容。退出代码为0。 不幸的是,没有记录的选项可以关闭它的冗长性,因此我正在寻找一种方法,仅在视觉上使其静音并保持打开的外壳干净以进行进一步的交互。 我怎样才能做到这一点? 问题答案: 将输出重定向到DEVNUL

  • 如何在Falcon中进行“内部重定向”? 我设置静态路由: 而且我想将'/'重定向到'/index.html',但不是作为超文本传输协议3xx,我想在内部进行,这样就浏览器而言,路径仍然是'/'但内容是什么'/静态/index.html'的内容。

  • 问题内容: 我想记录Python脚本的所有输出。我试过了: 现在,如果我“打印’某物’”,它将被记录下来。但是,如果我出现一些语法错误,例如说“ print’something#”,它将不会被记录-它会进入控制台。 如何从Python解释器中捕获错误? 我在这里看到了可能的解决方案: http://www.velocityreviews.com/forums/showpost.php?p=1868

  • 问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。

  • 问题内容: 注意 我已经看到了multiprocessing.Process的日志输出-不幸的是,它没有回答这个问题。 我正在通过多重处理创建一个子进程(在Windows上)。我希望 所有 子进程的stdout和stderr输出都重定向到日志文件,而不是出现在控制台上。我看到的唯一建议是让子进程将sys.stdout设置为文件。但是,由于Windows上stdout重定向的行为,这不能有效地重定向