2017-06-10 14 views
0

私はpythonからcygwinを実行し、cygwinコマンドを実行します。pythonサブプロセスからの基本的なcygwinコマンド

私はWindowsを使用していますので、cmdではなくcygwinでコマンドを実行します。私はPython 3.6.1を使用しています。

私は基本的なコマンドを実行する方法を知りたいので、そこからlsのように作業できます。

  • popenの()を使用しています@pstatix、によって提案された以下のソリューションを(このような何かを、それは動作しません)

    • subprocess.call("E:/cygwin/bin/bash.exe", "ls")を:私が試してみました。 stdin.write(b'ls')の後に実行stdin.close()/usr/bin/bash: line 1: ls: command not foundエラーで結果

    私は次のことを行うことができる午前:

    • オープンcygwinの:subprocess.call("E:/cygwin/bin/bash.exe")

    • (Windowsのcmdを実行する上commmands:subprocess.call("dir", shell=True)

    は、このフォームで、このことが可能ですで? 次のpythonコマンドを実行するとcygwinが自動的に終了するのですか、それとも先に終了する必要がありますか?

    これは比較的新しいものです。

  • +0

    あなたはまだ完全なコード行を示していません。あなたの投稿を更新して、私の答えに似た一連の行を表示してください。私たちはそれをすべて手助けするために見る必要があります。 – pstatix

    +0

    あなたのコードと上記の行は、文字通り私が持っているものです。私はこの作業がどのように構築され、他のコマンドを実行/実行できるかを把握しようとしていますが、現時点ではそれ以外には何もありません。 – sandboxj

    +2

    bashを実行してstdinに書き込むことなく、たくさんのコマンドを直接実行できるはずです。 Unixのコマンドラインは、ほとんどが '/ bin/ls'のような小さなプログラムで構成されています。おそらく' E:/ cygwin/bin/ls.exe'でしょう。 – eryksun

    答えて

    2
    from subprocess import Popen, PIPE 
    
    p = Popen("E:/cygwin/bin/bash.exe", stdin=PIPE, stdout=PIPE) 
    p.stdin.write("ls") 
    p.stdin.close() 
    out = p.stdout.read() 
    print (out) 
    
    +0

    'p.stdin.write(" ls ")'がエラーをスローする: "TypeError:バイトのようなオブジェクトは 'str'ではなく必須です。 "ls"のようなものは.write()の適切な引数ではないか、何か間違っていますか?他のコマンドはうまくいくようです。 – sandboxj

    +1

    @sandboxjあなたのPythonのバージョンは?バイトのようなものを送るには 'p.stdin.write(b'ls ')'を実行するだけです。しかし、Python 2.7.13のようにコードに問題はありません – pstatix

    +0

    私はPython 3.6.1を使用しています。 (b'ls ')で提案されている解決策は.write行を動作させますが、 'p.std.in.close()'を入力すると '/ usr/bin/bash:行1:ls:コマンドが見つかりません。 '。また、残りの2行を入力すると、最終的に 'b'''が出力されます。 – sandboxj

    関連する問題