Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python以非交互方式输入shell脚本变量值_Python_Bash_Shell_Subprocess_Stdin - Fatal编程技术网

使用python以非交互方式输入shell脚本变量值

使用python以非交互方式输入shell脚本变量值,python,bash,shell,subprocess,stdin,Python,Bash,Shell,Subprocess,Stdin,Shell脚本: 你好,上海 我想在python中调用Hello.sh,并以非交互方式填充变量“name”。如何做到这一点?您应该能够Popen。与子流程进行通信: from subprocess import Popen,PIPE p = Popen(['bash','./Hello.sh'],stdin=PIPE,stderr=PIPE,stdout=PIPE) stdout_data,stderr_data = p.communicate("Hello World!\n") +1月1日。

Shell脚本: 你好,上海


我想在python中调用Hello.sh,并以非交互方式填充变量“name”。如何做到这一点?

您应该能够
Popen。与子流程进行
通信:

from subprocess import Popen,PIPE
p = Popen(['bash','./Hello.sh'],stdin=PIPE,stderr=PIPE,stdout=PIPE)
stdout_data,stderr_data = p.communicate("Hello World!\n")
+1月1日。一种更为“贝壳式”的方法是:

import subprocess

the_name = 'the_name'
myproc = subprocess.Popen(['echo %s | bash Hello.sh' % the_name], stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True)
out, err = myproc.communicate()

print out

对于
shell=True
,我认为最好传递一个字符串,而不是一个列表。@mgilson当
shell=True
时:如果args是一个字符串,该字符串指定通过shell执行的命令。如果args是一个序列,则第一项指定命令字符串,任何附加项都将被视为shell本身的附加参数。所以这并不重要。谢谢,它按照我想要的方式工作。这和你的一样。
import subprocess

the_name = 'the_name'
myproc = subprocess.Popen(['echo %s | bash Hello.sh' % the_name], stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True)
out, err = myproc.communicate()

print out