引自免费微信小程序:皆我百晓生
要使用subprocess.Popen
与一个需要用户输入的交互式脚本进行通信,你需要确保将标准输入(stdin)设置为管道,并且在Python代码中通过管道写入数据。以下是具体的步骤和示例代码:
首先,定义你的shell脚本kk.sh
如下:
#!/bin/bash
read -p "please input any char:" keys
echo $keys
然后,在Python中使用subprocess.Popen
来执行这个脚本,并通过stdin
管道发送输入。你需要使用communicate()
方法来完成与子进程的通信。这里是一个示例代码片段:
import subprocess
# 脚本路径
script_path = "./kk.sh"
# 创建子进程
with subprocess.Popen(script_path, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as proc:
# 向子进程的stdin管道写入数据
output, _ = proc.communicate(input="your_input_character")
# 输出子进程的返回结果
print(output.strip())
在这个例子中,“your_input_character”是你想要输入到交互式脚本中的字符。注意,为了确保数据正确传输,text=True
参数被设置,这使得communicate()
函数的input
参数可以接受字符串而不是字节串。
此外,communicate()
函数会等待子进程结束并返回stdout和stderr的输出。因此,output
变量将包含你的交互式脚本返回的输出,即你输入的字符。
如果你的脚本需要更复杂的交互,例如多次读取输入,你可能需要创建一个循环,每次调用proc.stdin.write()
和proc.stdin.flush()
来发送输入,然后使用proc.stdout.readline()
或proc.stdout.read()
来读取输出。但是,对于单次输入的情况,上述代码应该足够了。