草庐IT

python - 子进程命令的实时输出

我正在使用python脚本作为流体动力学代码的驱动程序。当需要运行模拟时,我使用subprocess.Popen来运行代码,将stdout和stderr的输出收集到一个subprocess.PIPE---然后我可以打印(并保存到日志文件)输出信息,并检查是否有任何错误。问题是,我不知道代码是如何进行的。如果我直接从命令行运行它,它会输出关于它的迭代时间、时间、下一个时间步长等信息。有没有办法既存储输出(用于日志记录和错误检查)又生成实时流输出?我的代码的相关部分:ret_val=subprocess.Popen(run_command,stdout=subprocess.PIPE,st

python - 子进程 Popen 和 call 有什么区别(我该如何使用它们)?

我想从Python调用一个外部程序。我已经使用了Popen()和call()来做到这一点。两者有什么区别?我的具体目标是从Python运行以下命令。我不确定重定向是如何工作的。./my_script.sh>output我读过thedocumentation它说call()是一个便利功能或快捷功能。我们是否会因为使用call()而不是Popen()而失去任何权力? 最佳答案 有两种方法可以进行重定向。两者都适用于subprocess.Popen或subprocess.call。设置关键字参数shell=True或executable=

python - 在进程运行时不断打印子进程输出

要从我的Python脚本启动程序,我使用以下方法:defexecute(command):process=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)output=process.communicate()[0]exitCode=process.returncodeif(exitCode==0):returnoutputelse:raiseProcessException(command,exitCode,output)所以当我启动像Process.execute

修改环境的 Python 子进程/Popen

我相信在稍加修改的环境下运行外部命令是很常见的情况。这就是我倾向于这样做的方式:importsubprocess,osmy_env=os.environmy_env["PATH"]="/usr/sbin:/sbin:"+my_env["PATH"]subprocess.Popen(my_command,env=my_env)我有一种直觉,认为有更好的方法;看起来还好吗? 最佳答案 如果你不打算为当前进程修改os.environ,我认为os.environ.copy()更好:importsubprocess,osmy_env=os.e

python - 如何隐藏子进程的输出

我在Ubuntu上使用eSpeak,并且有一个Python2.7脚本,可以打印并说出一条消息:importsubprocesstext='HelloWorld.'printtextsubprocess.call(['espeak',text])eSpeak会产生所需的声音,但会因为一些错误(ALSAlib...,没有套接字连接)而使外壳困惑,因此我无法轻松阅读之前打印的内容。退出代码为0。不幸的是,没有记录的选项可以关闭它的冗长,所以我正在寻找一种方法来仅在视觉上使其静音并保持打开的外壳清洁以进行进一步的交互。我该怎么做? 最佳答案

python - 如何终止使用 shell=True 启动的 python 子进程

我正在使用以下命令启动一个子进程:p=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)但是,当我尝试使用以下方法杀死时:p.terminate()或p.kill()该命令一直在后台运行,所以我想知道如何才能真正终止该进程。请注意,当我使用以下命令运行命令时:p=subprocess.Popen(cmd.split(),stdout=subprocess.PIPE)发出p.terminate()时它确实终止成功。 最佳答案 使用processgroup以便能够向组中的所有进

ruby - 如果 IO.pipe 表现得像资源,为什么需要在子进程中关闭管道?

下面的代码可以工作,但是如果reader和writer是跨父进程和子进程的共享资源,为什么他们首先要关闭?reader,writer=IO.pipeforkdoreader.closewriter.puts"foobar"endwriter.closeputsreader.read这对我来说没有任何意义,因为我认为应该像我编写的以下代码那样在写操作之后关闭读取器和写入器reader,writer=IO.pipeforkdowriter.puts"foobar"writer.closeendProcess.waitputsreader.readreader.close我不知道为什么它不起

ruby - 用子进程杀死 ruby 中的 fork 进程

以下代码fork主进程并在反引号中运行命令。脚本末尾的kill只会杀死fork进程,但不会杀死它的子进程(即sleep命令)。pid=forkdoThread.newdo`sleep20`endendsleep(1)Process.kill("HUP",pid)除了搜索进程树之外,是否有办法杀死所有子进程(由fork进程中的线程中的反引号命令生成)? 最佳答案 Behindthescenebothsystemandbacktickoperationsuseforktoforkthecurrentprocessandthentheye

ruby - 如何在 Ruby 中使子进程超时

我想测试一个进程是否正常运行,所以我运行:cmd="myunixcommand"results=`#{cmd}`如何为命令添加超时,以便在超过x秒时我可以假定它不工作? 最佳答案 Ruby附带Timeoutmodule.require'timeout'res=""status=Timeout::timeout(5){res=`#{cmd}`}rescueTimeout::Error#abitofexperimenting:res=nilstatus=Timeout::timeout(1){res=`sleep2`}rescueTim

ruby - Runy Open3.popen3 从命令行输入子进程

目标:我正在用ruby​​编写一个工作流命令行程序,它在UNIXshell上顺序执行其他程序,其中一些程序需要用户输入。问题虽然我可以成功处理stdout和stderr多亏了这个有用的blogpost通过NickCharlton,但是我坚持捕获用户输入并通过命令行将其传递给子进程。代码如下:方法moduleCMDdefrun(cmd,&block)Open3.popen3(cmd)do|stdin,stdout,stderr,thread|Thread.newdo#STDOUTuntil(line=stdout.gets).nil?doyieldnil,line,nil,threadi