我在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
答案 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读取数据,直到达到文件结尾。等待进程终止。