我目前正在编写python中的darcs抽象,但是一旦我尝试将数据发送到我的存储库,存储库就会请求密钥;我在想是否有可能使用stdin或其他任何方式将密钥发送到darc,以模拟用户输入的内容,因为这样做;我可以允许用户简单地存储包含其信息的文件,而python只是读取该文件并触发其内容。
def execute(cmd):
proc = subprocess.Popen(cmd, shell=True)
proc.wait()
我正在使用的代码来启动darcs;执行(“darcs%s”%(parems))
答案 0 :(得分:4)
尝试pexpect
,它是为此目的而构建的(自动化其他交互式应用)。
请参阅:http://pypi.python.org/pypi/pexpect/
文档中的用法示例:
import pexpect
child = pexpect.spawn ('ftp ftp.openbsd.org')
child.expect ('Name .*: ')
child.sendline ('anonymous')
child.expect ('Password:')
child.sendline ('noah@example.com')
child.expect ('ftp> ')
child.sendline ('cd pub')
child.expect('ftp> ')
child.sendline ('get ls-lR.gz')
child.expect('ftp> ')
child.sendline ('bye')
答案 1 :(得分:3)
subprocess
模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。
subprocess.Popen.communicate
方法用于通讯:
Popen.communicate(input=None)
与流程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。等待进程终止。 可选输入参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则为None。
communic()返回一个元组(stdoutdata,stderrdata)。
请注意,如果要将数据发送到进程的stdin,则需要使用
stdin=PIPE
创建Popen对象。同样,要在结果元组中获取除None之外的任何内容,您还需要提供stdout=PIPE
和/或stderr=PIPE
。