Вы можете сделать это:
vasp = subprocess.Popen('vasp', stdout=subprocess.PIPE)
subprocess.check_call(('tee', 'tee_output'), stdin=vasp.stdout)
Обычно это безопаснее, чем использовать shell=True
, особенно если вы не можете доверять вводу.
Обратите внимание, что check_call
провериткод возврата tee
, а не vasp
, чтобы увидеть, должен ли он поднять CalledProcessError
.(Метод shell=True
будет делать то же самое, поскольку он соответствует поведению конвейера оболочки.) Если вы хотите, вы можете проверить код возврата vasp
самостоятельно, вызвав vasp.poll()
.(Другой метод не позволит вам сделать это.)