- 拆下
shell=True
零件。你的外壳与它无关。使用shell=True
是麻烦的常见原因。
- 使用 cmd 的参数列表。
例子:
cmd = ['cvs',
'-d:pserver:anonymous@bayonne.cvs.sourceforge.net:/cvsroot/bayonne',
'login']
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
这不会阻止我的系统(我的脚本继续执行)。然而,由于 cvs 直接从终端读取密码(而不是从标准输入或输出),您不能只将密码写入子进程的标准输入。
您可以做的是将密码作为 CVSROOT 规范的一部分传递,如下所示:
:pserver:<user>[:<passwd>]@<server>:/<path>
即登录到 sourceforge 项目的功能:
import subprocess
def login_to_sourceforge_cvs(project, username='anonymous', password=''):
host = '%s.cvs.sourceforge.net' % project
path = '/cvsroot/%s' % project
cmd = ['cvs',
'-d:pserver:%s:%s@%s:%s' % (username, password, host, path),
'login']
p = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE
stderr=subprocess.STDOUT)
return p
这对我有用。打电话
login_to_sourceforge_cvs('bayonne')
将匿名登录到bayonne 项目的cvs。