1

最初に新しいファイルを作成し(存在しない場合)、次にci(新しく作成されたファイルで)を実行して、最初のリビジョン番号でrcsファイルを作成するpythonスクリプトを実行しようとしています。しかし、スクリプトを実行すると、説明とピリオド「.」で終わるように求められます。この部分をデフォルトの記述で自動化し、ユーザーの入力なしで 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(場所) の場合:

    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 行目、p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) ファイル "/usr/local/ pythonbrew/pythons/Python-2.7/lib/python2.7/subprocess.py"、672 行目、init errread、errwrite 内) ファイル "/usr/local/pythonbrew/pythons/Python-2.7/lib/python2.7/subprocess .py"、1201 行目、_execute_child で child_exception OSError を発生させます: [Errno 2] そのようなファイルまたはディレクトリはありません

4

1 に答える 1

0

の stdin 引数を使用subprocess.callして、サブプロセスにファイルのようなオブジェクトを与えて、標準入力 (手動で入力するもの) として使用できます。

StringIO モジュールには、メモリ内文字列へのファイルのようなインターフェイスを提供する StringIO というクラスが含まれています。

これら 2 つの部分を組み合わせると、ユーザーが手動で入力したかのように、特定の文字列を 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')
于 2016-01-13T22:09:29.170 に答える