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

时间:2016-03-13 19:40:34

标签: python

我在python Python 2.7.6上。 Python子进程管道在执行communic()之前执行命令。我甚至不想输出结果。

我正在测试,试图实现,

$ 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

1 个答案:

答案 0 :(得分:1)

您的代码没有任何问题,这就是Popen的工作原理。

该过程的创建启动它。

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

  

class subprocess.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.communicate(输入=无,超时=无)

     

与流程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。等待进程终止。