2017-10-02 9 views
1

J'ai besoin d'ouvrir le bloc-notes à partir de python3 puis d'obtenir le chemin du fichier vers n'importe quel fichier écrit par le programme. Voici ce que j'ai essayé.Ouvrez le bloc-notes, puis détectez le chemin de fichier pour tout fichier de sauvegarde.

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) 
) 

Je ne sais pas si c'est correct. Ca s'ouvre bien mais je ne peux pas avoir de sortie. Merci d'avance.

+0

Le bloc-notes n'écrira pas sur stdout. c'est écrire dans un fichier. Il y a probablement une meilleure façon de le faire, mais regardez l'instrumentation du syscall NtCreateFile avec quelque chose comme Pin d'Intel. –

+0

Comment puis-je trouver ledit fichier? – Jasong

+0

Alors on l'accroche? Je cherche la documentation, je ne suis pas familier avec ça. Pouvez-vous fournir un lien vers votre documentation préférée à ce sujet? – Jasong

Répondre

0

Vous pouvez utiliser la bibliothèque Pin d'Intel et raccorder le syscall NtCreateFile. Vous pouvez trouver les numéros de syscall here (x64) et here (x86). Fondamentalement, vous écrivez un pintool pour enregistrer les rappels au niveau de l'instruction, niveau de bloc de base, niveau de fonction, etc ... Ensuite, vous exécutez Pin, en passant votre pintool et le programme que vous souhaitez instrument (dans ce cas) .

Si vous connectez le syscall NtCreateFile, vous pourrez afficher les paramètres et renvoyer la valeur de ce syscall chaque fois que le bloc-notes l'appelle. Vous pouvez trouver un exemple dans l'exemple strace du paquet Pin.

Vous pourriez également trouver des liaisons python pour Pin. Sinon, vous devrez trouver un autre moyen de communiquer avec python.

+0

Apparemment, je n'ai pas le droit de voter. Je suis trop nouveau Mes excuses. – Jasong

+0

@Jasong Oui, je sais. C'est parfait. Vous n'avez pas assez de rep. Tout ce que vous pouvez faire est d'accepter la réponse si vous pensez qu'elle répond à la question. –