2017-05-02 11 views
3

help(tkinter.Tk())の出力をpythonファイルに転送しようとしていますが、何らかの理由でそれが起こっていません。help(tkinter.Tk())の内容をpythonファイルに転送するには

subprocessモジュールを使用せずにこれを試したかったのです。以下はコードです。 help()以来

import tkinter 

window=tkinter.Tk() 

with open('C:\\Users\\aryan21710\\help_output.txt','a') as f: 
    #f.write(help(tkinter.Tk())) 
    print (help(tkinter.Tk()),file=f) 

with open('C:\\Users\\aryan21710\\help_output.txt','r') as f: 
    for line in f: 
     line=line.split('\n') 
     if 'destroy' in line: 
      print('DESTROY FOUND IN FOLLOWING LINE:- {0}'.format(line)) 
+0

注意標準出力。対話的セッションでは、 'print(help(tkinter.Tk()))'は何も出力しません。 – numbermaniac

+1

Windowsのパスを使って作業するときには、 '' C:\\ Users \\ aryan \\ test.txt''の代わりに生の文字列を使うことをお勧めします。 'r'C:\ Users \ aryan \ test.txt'' –

答えて

1

は、対話的なPythonを起動し、何も返さない、あなたがサブプロセスでそれを実行し、その出力を読み込む必要があります。

import subprocess 
cmd = 'python3 -c "import tkinter; help(tkinter.Tk())"' 
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 

今、あなたはhelp()の行を取得するにはcmd.stdoutにアクセスすることができますの出力。彼らはバイトしていることに注意してください、しかし、あなたは簡単で、単一の複数行の文字列にこれらの行を変換することができます: `help`は、通常、対話型のヘルプファイルを起動するので、それが印刷されないことを

help_text = ''.join(line.decode('utf-8') for line in process.stdout) 
+0

私は上記のコードを使ってみましたが、希望の出力を得ることができませんでした。インポートサブプロセス cmd = 'python3 -c "インポートtkinter; help(tkinter.Tk())"'プロセス= subprocess.Popen(cmd、shell = True、stdout = subprocess.PIPE) print(プロセス) <サブプロセス。 0x00000242620CC0F0でpopenのオブジェクト> process.stdoutの行のための: \tプリント(ライン)= ' help_textに' .join(line.decode( 'UTF-8')process.stdoutの行のための) プリント(help_textに) – Ary

+1

@Aryおそらくあなたのマシンでは 'python3'が利用できません。もしあなたがWindows上にいるのであれば、 'python3 -c'の代わりに' python -c'を使うように 'cmd'を変更してみてください。 –

+1

Thanks Markus。うん、私は窓の上にいる。その理由は、python3 -cは動作しませんでした。 cmd = python -cで、出力を返します。 – Ary

関連する問題