我在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)
与进程交互:将数据发送到标准。从标准输出和标准输出读取数据,直到到达文件末尾。等待进程终止。