Python,冒充stdin
我目前正在用python编写一个关于DARC的抽象,但是一旦我试图向我的存储库发送数据,存储库就会请求一个密钥;我在想,是否有可能让python向DARC发送密钥,使用stdin或其他任何东西来模拟用户输入的内容,因为这样做;我可以允许用户简单地存储一个包含信息的文件,python只需读取该文件并释放其内容Python,冒充stdin,python,version-control,stdin,pipe,Python,Version Control,Stdin,Pipe,我目前正在用python编写一个关于DARC的抽象,但是一旦我试图向我的存储库发送数据,存储库就会请求一个密钥;我在想,是否有可能让python向DARC发送密钥,使用stdin或其他任何东西来模拟用户输入的内容,因为这样做;我可以允许用户简单地存储一个包含信息的文件,python只需读取该文件并释放其内容 def execute(cmd): proc = subprocess.Popen(cmd, shell=True) proc.wait() 是我用来启动DARC的代码;执
def execute(cmd):
proc = subprocess.Popen(cmd, shell=True)
proc.wait()
是我用来启动DARC的代码;执行(“DARC%s”%(parems))使用:
子流程
模块允许您生成新流程,连接到它们的输入/输出/错误管道,并获取它们的返回代码
该方法用于通信:
Popen.communication(输入=无)
与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止可选输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是“无”
communicate()返回一个元组(stdoutdata、stderrdata)
请注意,如果要将数据发送到进程的stdin,则需要使用stdin=PIPE
创建Popen对象。类似地,要在结果元组中获得除None之外的任何内容,还需要给出stdout=PIPE
和/或stderr=PIPE
使用:
子流程
模块允许您生成新流程,连接到它们的输入/输出/错误管道,并获取它们的返回代码
该方法用于通信:
Popen.communication(输入=无)
与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾。等待进程终止可选输入参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则应该是“无”
communicate()返回一个元组(stdoutdata、stderrdata)
请注意,如果要将数据发送到进程的stdin,则需要使用stdin=PIPE
创建Popen对象。类似地,要在结果元组中获得除None之外的任何内容,还需要给出stdout=PIPE
和/或stderr=PIPE
请尝试
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')
请尝试
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')
你们如何启动DARC?通过subprocess?subprocess.Popen(command,shell=True)-是的,确实如此,您在这方面做了多少?您是否正在使用
stdin=subprocess.PIPE
和.communicate()
?给我们看看你的代码。@Skeen:请用所有事实更新你的问题。请发布足够的代码,我们可以看到你在做什么。不远的地方,实际上没有地方,我有点放弃尝试的东西;我考虑过一些烟斗的东西,但我不知道怎么做因此,我来到这里,几乎只是在寻找一种开始的方式;你提到的两个项目中哪一个是最好的,在你看来,他们的优点和缺点是什么。你是如何启动DARC的?通过subprocess?subprocess.Popen(command,shell=True)-是的,确实如此,您在这方面做了多少?您是否正在使用stdin=subprocess.PIPE
和.communicate()
?给我们看看你的代码。@Skeen:请用所有事实更新你的问题。请发布足够的代码,我们可以看到你在做什么。不远的地方,实际上没有地方,我有点放弃尝试的东西;我考虑过一些烟斗的东西,但我不知道怎么做因此,我来到这里,几乎只是在寻找一种开始的方式;你提到的两个中哪一个是最好的,在你看来,他们的长处和短处是什么。这似乎真的是我想要的:)-我猜expect只是在stdout上听?而sendline只是提供stdin?是的,它将stdin/stdout的所有细节抽象到您的子进程。Windows?哦您应该在问题中澄清这一点,并添加一个“windows”标记。您可以这样说,但我正在尝试独立于平台,因此我使用python。:)这真的像是我要找的:)-我猜expect只是在stdout上听?而sendline只是提供stdin?是的,它将stdin/stdout的所有细节抽象到您的子进程。Windows?哦您应该在问题中澄清这一点,并添加一个“windows”标记。您可以这样说,但我正在尝试独立于平台,因此我使用python。:)我正在使用该模块创建流程,但是,我不确定如何准确连接管道。我认为这将是我的解决方案:)@Skeen,很有趣。这是一个非常简单的解决方案,大多数人认为你需要从最初的问题中得到预期。谢谢很高兴你的问题得到了解决。事实上,我曾尝试使用pexports,但是没有windows支持。我正在使用该模块创建进程,但是,我不确定如何准确连接管道。我认为这将是我的解决方案:)@Skeen,有趣。这是一个非常简单的解决方案,大多数人认为你需要从你最初的问题中得到预期的结果。谢谢很高兴你的问题解决了。实际上我试过使用pexports,但是没有windows支持