2016-06-27 14 views
1

Windowsレベルのpythonスクリプトを使ってcygwinでコマンドを実行し、stdinのパラメータを渡したい。 私はすでにstackoverflowに関する多くのトピックを読んでいますが、私が見つけた解決策は私のためには機能しません。 は、ここでスタックのトピックに基づいてコードです:Windowsのpythonスクリプトを使ってcygwinでプログラムを実行するには?

/usr/bin/bash: line 1: uname: command not found 
('', None) 

EDIT:代わりにminttyのはbashを示唆するためにmatzeriするクレジット

from subprocess import Popen, PIPE 

cygwin = Popen(['CYGWINPATH\\bash.exe', '-'],stdin=PIPE,stdout=PIPE) 
cygwin.communicate(input="commandToRun") 

これは、適切なコマンドを見つけることができません。 例:私はWindowsデスクトップ上にPythonスクリプトを持っています。ダブルクリック後、cygwinの内部でプログラムを開き、stdinのパラメータを渡したいと思っています。

答えて

1

minttyはコマンドシェルではありません。代わりにbashを使用してください。

$ cat prova.py 
#!/usr/bin/python 
from subprocess import Popen, PIPE 

cygwin = Popen(['bash'],stdin=PIPE,stdout=PIPE) 
result=cygwin.communicate(input="uname -a") 
print result 

ので、あなたは、スタンドアローンプログラム

#!/usr/bin/python 
from subprocess import Popen, PIPE 

cygwin = Popen(['lftp'],stdin=PIPE,stdout=PIPE) 
result=cygwin.communicate(
input=" set dns:order inet inet6 \n\ 
open ftp.mirrorservice.org/sites/sourceware.org/pub/cygwin/x86/release\n\ 
find lftp\n\ 
quit ") 
print result[0] 

$ ./prova.py 
    ('CYGWIN_NT-6.1 GE-MATZERI-EU 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin\n', None) 

第二の例を持つことができ、出力は

$ ./prova2.py 
lftp/ 
lftp/lftp-4.6.5-1-src.tar.xz 
lftp/lftp-4.6.5-1.tar.xz 
lftp/lftp-4.7.2-1-src.tar.xz 
lftp/lftp-4.7.2-1.tar.xz 
lftp/lftp-debuginfo/ 
lftp/lftp-debuginfo/lftp-debuginfo-4.6.5-1.tar.xz 
lftp/lftp-debuginfo/lftp-debuginfo-4.7.2-1.tar.xz 
lftp/lftp-debuginfo/md5.sum 
lftp/lftp-debuginfo/setup.hint 
lftp/lftp-debuginfo/sha512.sum 
lftp/md5.sum 
lftp/setup.hint 
lftp/sha512.sum 
+0

あなたのpythonを実行する場合、これは良い答えですWindowsではなくcygwinレベルからのスクリプト。これを投稿していただきありがとうございます:)! – formateu

関連する問題