我试图从Node.js启动一个shell命令, 而不用redirect那个命令的input和输出,就像使用shell脚本或者使用Ruby的system命令来执行shell命令一样。 如果subprocess想写入STDOUT,我希望直接进入控制台(或者如果我的Node应用程序的输出被redirect了,那么会被redirect)。 节点似乎没有任何直接的方法来做到这一点。 看起来运行另一个进程的唯一方法是使用child_process ,它始终将subprocess的input和输出redirect到pipe道。 我可以编写代码来接受来自这些pipe道的数据,并将其写入到我的进程的STDOUT和STDERR,但是如果我这样做,这些API迫使我牺牲一些灵活性。 我想要两个function: Shell语法。 我希望能够在命令之间输出输出,或者运行Windowsbatch file。 无限输出。 如果我向一个编译器发出消息,并且想要产生兆字节的编译器警告,我希望它们全部在屏幕上滚动(直到用户厌倦它并点击Ctrl + C)。 它看起来像节点希望强迫我在这两个function之间进行select。 如果我想要无限量的输出,我可以使用child_process.spawn ,然后执行child.stdout.on('data', function(data) { process.stdout.write(data); }); 和stderr ,它会很乐意pipe数据直到牛回家。 不幸的是, spawn不支持shell语法。 如果我想要shell语法,我可以使用child_process.exec 。 但exec坚持要cachingsubprocess的STDOUT和STDERR,最后把它们全部提供给我,并且限制了这些缓冲区的大小(可configuration,默认为200K)。 我仍然可以挂上on('data')事件,如果我想在输出生成时看到输出,但是exec仍然会将数据添加到它的缓冲区中。 当数据量超过预定义的缓冲区大小时, exec将终止subprocess。 (还有child_process.execFile ,从灵活性的angular度来看,这是两个世界中最糟糕的一点:没有shell语法,但是你仍然要限制你期望的输出量。 我错过了什么吗? 有没有什么方法可以在Node中向subprocess输出,而不是redirectinput和输出? 一些支持shell语法的东西,并且在预定义的输出量之后不会出错,就像在shell脚本,Ruby等中一样。
1. “ TheTick” 在内核中定义 1. a) %x{} Percent X <The Backtick的替代语法 在parse.y中定义,参见讨论 2. system() 内核#系统 3. fork() 内核#fork,进程#fork 4. open() 打开一个pipe道 内核#开 4.A. IO.popen()行为与open()相同 打开一个pipe道 IO#POPEN 4.B. open("|-") 叉到一个pipe道 4.C. IO.popen("-") <与open("|-")行为相同 叉到一个pipe道 看讨论 5. Open3.popen3() require 'open3' stdlib Open3 6. PTY.spawn() require 'pty' stdlib PTY 7. Shell.transact() require 'shell' stdlib Shell 什么时候应该放弃一个更复杂的方法的可靠反弹? 编辑1.非常感谢Avdi Grimm […]
我需要使用subprocess.Popen启动一些长时间运行的进程,并希望从每个自动pipe道的stdout和stderr单独的日志文件。 每个进程将同时运行几分钟,并且我希望每个进程有两个日志文件( stdout和stderr )在进程运行时写入。 为了更新每个日志文件,是否需要在循环中的每个进程上不断调用p.communicate() ,还是有一些方法来调用原始Popen命令,以便stdout和stderr自动stream式传输以打开文件句柄?
我想在一个python脚本中得到一些shell命令的输出,例如ls或df 。 我看到commands.getoutput('ls')被弃用,但subprocess.call('ls')只会得到我的返回码。 我希望有一些简单的解决scheme。
我想使用在execSync 0.12中添加的execSync方法,但仍然在控制台窗口中输出我运行Node脚本的输出。 例如,如果我运行一个具有以下行的NodeJS脚本,我希望在控制台中看到rsync命令“live”的完整输出: require('child_process').execSync('rsync -avAXz –info=progress2 "/src" "/dest"'); 我明白, execSync返回命令的输出,我可以执行后,打印到控制台,但这样我没有“活”输出…
我试图运行一个程序,使用subprocess.call()在python代码中进行一些系统调用…其中抛出以下错误,回溯 Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/python2.7/subprocess.py", line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 我的实际Python代码如下, url = "/media/videos/3cf02324-43e5-4996-bbdf-6377df448ae4.mp4" real_path = "/home/chanceapp/webapps/chanceapp/chanceapp"+url fake_crop_path = "/home/chanceapp/webapps/chanceapp/chanceapp/fake1"+url […]
要从我的Python脚本启动程序,我使用下面的方法: def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = process.communicate()[0] exitCode = process.returncode if (exitCode == 0): return output else: raise ProcessException(command, exitCode, output) 所以当我启动一个像Process.execute("mvn clean install")这样的进程时,我的程序一直等到进程结束,然后才得到程序的完整输出。 如果我正在运行需要一段时间才能完成的进程,这很烦人。 我可以让我的程序逐行写入进程输出,在循环结束之前轮询输出进程吗? ** [编辑]抱歉,我发现这个问题之前没有很好地search。 线程实际上是关键。 在这里find一个示例来演示如何执行它:** Python Subprocess.Popen从一个线程
我想用ps -A | grep 'process_name'来使用subprocess.check_output() ps -A | grep 'process_name' 。 我尝试了各种解决scheme,但迄今没有任何工作 有人可以指导我如何做到这一点?
我试图在Python中进行系统调用,并将输出存储为一个string,我可以在Python程序中进行操作。 #!/usr/bin/python import subprocess p2 = subprocess.Popen("ntpq -p") 我已经尝试了一些东西,包括这里的一些build议: 检索subprocess.call()的输出 但没有任何运气。
我想在一个线程内使用subprocess模块和Popen启动一个'rsync'。 在我调用rsync之后,我还需要读取输出。 我正在使用沟通方法来读取输出。 代码运行良好,当我不使用线程。 看来,当我使用一个线程挂在通信电话。 另外我注意到的是,当我设置shell = False的时候,在线程中运行时,我从通信中得不到任何东西。