Tag: subprocess

Python C程序subprocess挂在“for it in iter”

好的,我试图从一个python脚本运行一个C程序。 目前我正在使用一个testingC程序: #include <stdio.h> int main() { while (1) { printf("2000\n"); sleep(1); } return 0; } 为了模拟我将要使用的程序,它不断地从传感器读取数据。 然后我试图从C程序中读取python中的subprocess的输出(在这种情况下是"2000" ): #!usr/bin/python import subprocess process = subprocess.Popen("./main", stdout=subprocess.PIPE) while True: for line in iter(process.stdout.readline, ''): print line, 但是这不起作用。 从使用print语句开始,它运行.Popen行,然后等待for line in iter(process.stdout.readline, ''): .Popen直到我按下Ctrl-C。 为什么是这样? 这正是我见过的大多数例子都是他们的代码,但是它并没有读取这个文件。 编辑: 有没有办法让它只在有东西要读的时候运行?

subprocess中'shell = True'的实际含义

我正在调用与subprocess模块不同的进程。 不过,我有一个问题。 在以下代码中: callProcess = subprocess.Popen(['ls', '-l'], shell=True) 和 callProcess = subprocess.Popen(['ls', '-l']) # without shell 两者都有效。 阅读文档后,我才知道shell=True意味着通过shell执行代码。 所以这意味着如果没有,这个过程是直接开始的。 那么我应该怎么样呢?我需要运行一个进程并得到它的输出。 从shell或其外部调用它有什么好处。

超时使用模块“subprocess”

下面是运行任意命令返回stdout数据的Python代码,或者引发非零退出代码的exception: proc = subprocess.Popen( cmd, stderr=subprocess.STDOUT, # Merge stdout and stderr stdout=subprocess.PIPE, shell=True) communicate是用来等待进程退出: stdoutdata, stderrdata = proc.communicate() subprocess进程模块不支持超时 – 杀死运行超过X秒的进程的能力 – 因此, communicate可能需要永远运行。 在Windows和Linux上运行的Python程序中实现超时的最简单方法是什么?

Pythonsubprocessreadlines()挂起

我试图完成的任务是stream式传输一个ruby文件并打印输出。 ( 注意 :我不想一次打印所有内容) main.py from subprocess import Popen, PIPE, STDOUT import pty import os file_path = '/Users/luciano/Desktop/ruby_sleep.rb' command = ' '.join(["ruby", file_path]) master, slave = pty.openpty() proc = Popen(command, bufsize=0, shell=True, stdout=slave, stderr=slave, close_fds=True) stdout = os.fdopen(master, 'r', 0) while proc.poll() is None: data = stdout.readline() if data != "": print(data) else: break print("This […]

从Python运行shell命令并捕获输出

我想编写一个函数来执行一个shell命令并将其输出作为一个string返回,不pipe它是一个错误还是成功的消息。 我只想得到和命令行一样的结果。 什么会是一个代码示例,会做这样的事情? 例如: def run_command(cmd): # ?????? print run_command('mysqladmin create test -uroot -pmysqladmin12') # Should output something like: # mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'test'; database exists'

如何使用subprocess.Popen通过pipe道连接多个进程?

如何使用Python subprocess模块执行以下shell命令? echo "input data" | awk -f script.awk | sort > outfile.txt input数据将来自一个string,所以我实际上不需要echo 。 我有这么远,任何人都可以解释我怎么得到它通过sort吗? p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=file("outfile.txt", "w")) p_awk.communicate( "input data" ) 更新 :请注意,虽然下面接受的答案实际上并没有回答问题,但我相信S.Lott是正确的,最好是避免首先解决这个问题!

Python:从subprocess.communicate()读取stream式input

我正在使用Python的subprocess.communicate()从运行了大约一分钟的进程中读取stdout。 如何以stream方式打印出该进程stdout的每一行,以便我可以在输出生成时看到输出,但在继续之前仍然阻止进程终止? subprocess.communicate()似乎给所有的输出一次。

非阻塞读取python中的subprocess.PIPE

我正在使用subprocess模块来启动一个subprocess并连接到它的输出stream(标准输出)。 我想能够在其stdout上执行非阻塞读取。 有没有办法让.readline非阻塞或在我调用.readline之前检查stream中是否有数据? 我希望这是可移植的,或者至less在Windows和Linux下工作。 这里是我现在是怎么做的(如果没有数据可用,它会阻止在.readline ): p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()

在Python中调用外部命令

如何从Python脚本中调用一个外部命令(就像我在Unix shell或Windows命令提示符下键入的那样)?