- 部品を取り外し
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 は (標準入力や標準出力からではなく) 端末から直接パスワードを読み取るため、サブプロセスの stdin にパスワードを書き込むことはできません。
代わりに、次のように 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 に匿名でログインします。