2017-10-02 9 views
1

私はpython3からメモ帳を開き、プログラムによって書き込まれたファイルへのファイルパスを取得する必要があります。ここで私が試したことがあります。メモ帳を開き、出力保存ファイルのファイルパスを検出します。

from subprocess import Popen,PIPE 
import subprocess as sp 

'' 
cmd = r'C:\path_to_notepad.exe' 
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, 
universal_newlines=True) 
stdout, stderr = p.communicate('\0\1\1') 

print("stdout: %r\nstderr: %r" % (stdout, stderr)) 
if p.returncode !=0: 
    raise sp.CalledProcessError(p.returncode, cmd, output = 
(stdout, stderr) 
) 

これが正しいかどうかわかりません。それはうまく開きますが、私は出力を得ることができません。 ありがとうございます。

+0

メモ帳は標準出力に書き込まれません。それはファイルへの書き込みです。これを行うにはもっと良い方法がありますが、NtCreateFileシステムコールをインテルのピンのようなものでインスツルメントします。 –

+0

上記のファイルはどのようにして見つけることができますか? – Jasong

+0

だから私たちはそれをフックしますか?私はドキュメンテーションを探していますが、私はこれに慣れていません。これに関するお気に入りのドキュメントへのリンクを提供できますか? – Jasong

答えて

0

Intelのピンライブラリを使用して、NtCreateFileシステムコールをフックすることができます。システムコール番号here (x64)here (x86)があります。

基本的には、命令レベル、基本ブロックレベル、機能レベルなどでコールバックを登録するためのpintoolを作成します。次に、Pinを実行して、pintoolとインストルメントしたいプログラム(この場合はメモ帳) 。

NtCreateFileシステムコールをフックすると、ノートパッドが呼び出すたびにそのシステムコールのパラメータと戻り値を表示できます。これに関する例は、Pinパッケージのstraceの例で見つけることができます。

Pin用のPythonバインディングも見つかる場合があります。そうでない場合は、別の方法でPythonに返信する必要があります。

+0

どうやら私は上院への投票を許可されていません。私は新しいです。謝罪いたします。 – Jasong

+0

@ジャソンええ、私は知っています。大丈夫だよー。あなたは十分な担当者がいません。質問に答えたと思えば答えを受け入れるだけです。 –

関連する問題