我正在尝试执行首先创建新文件(如果它不存在)的python脚本,然后执行ci(在新创建的文件上)以创建具有初始修订号的rcs文件。但是当我运行脚本时,它会要求我描述并以句点“。”结束。我希望这部分使用默认描述自动化,并在没有用户输入的情况下创建rcs文件。任何帮助将非常感激。以下是我的代码:
import os
import subprocesss
if os.path.isfile(location):
print "File already exists"
else:
f = open(location,'a')
subprocess.call(["ci", "-u", location])
f.close()
print "new file has been created"
我试过了,我收到以下错误:
导入os
导入子流程
如果os.path.isfile(location):
print "File already exists"
否则:
f = open(location,'a')
cmd = "ci -u "+location
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
stdout_data = p.communicate(input='change\n.')[0]
f.close()
print "new file has been created"
追踪(最近一次通话): 文件“testshell.py”,第15行,in p = subprocess.Popen(cmd,stdout = subprocess.PIPE,stderr = subprocess.STDOUT,close_fds = True) 在 init 中输入文件“/usr/local/pythonbrew/pythons/Python-2.7/lib/python2.7/subprocess.py”,第672行 errread,errwrite) _execute_child中的文件“/usr/local/pythonbrew/pythons/Python-2.7/lib/python2.7/subprocess.py”,第1201行 提出child_exception OSError:[Errno 2]没有这样的文件或目录
答案 0 :(得分:0)
您可以使用subprocess.call
的stdin参数为子进程提供一个类似文件的对象作为其标准输入(您手动输入的内容)。
StringIO模块包含一个名为StringIO的类,它为内存中的字符串提供类似文件的接口。
将这两个部分组合在一起将允许您将特定字符串发送到ci,就像用户手动输入一样
from StringIO import StringIO
import subprocess
...
subprocess.call(['command', 'with', 'args'], stdin=StringIO('StandardInput'))
或者,正如CharlesDuffy建议的那样,你可以使用Popen及其沟通方法:
import subprocess
proc = subprocess.Popen(['command', 'with', 'args'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate('StandardInput')