Python 子进程管道在执行 communication() 之前执行命令



我在python Python 2.7.6上。Python 子进程管道在执行 communication() 之前执行命令。我什至对输出结果不感兴趣。

我正在测试,试图实现,

$ echo date | at [timespec]

我的代码出了什么问题?

In [2]: cmd = subprocess.Popen(['echo', 'date'], stdout=subprocess.PIPE)
In [3]: future = datetime.now() + timedelta(minutes=1)
In [4]: at = subprocess.Popen(['at', future.strftime("%H:%M %D")], stdin=cmd.stdout, stdout=subprocess.PIPE)
In [5]: warning: commands will be executed using /bin/sh
job 11 at Sun Mar 13 16:31:00 2016

你的代码没有任何问题,这就是Popen的工作方式。

进程的创建将启动它。

process.communicate的调用只是等待它完成。请参阅文档:https://docs.python.org/3.5/library/subprocess.html

类子进程。Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=())

在新进程中执行子程序。在 POSIX 上,该类使用类似 os.execvp() 的行为来执行子程序。在 Windows 上,该类使用 Windows CreateProcess() 函数。Popen的论据如下。

并沟通:

Popen.communication(input=None, timeout=None)

与进程交互:将数据发送到标准。从标准输出和标准输出读取数据,直到到达文件末尾。等待进程终止。

最新更新