2010-12-14 38 views
1

Je souhaite ouvrir un fichier en utilisant le module subprocess comme si le fichier avait été double-cliqué dans l'Explorateur. Comment je fais ça?Module de sous-processus Python équivalent pour double-clic dans Windows

J'ai essayé la ligne suivante:

subprocess.call("C:/myfile.csv", shell=True) 

qui renvoie une erreur en disant:

La syntaxe de la commande est incorrecte.
'C: \' n'est pas reconnu comme une commande interne ou externe, un fichier exécutable ou un fichier séquentiel.

Comment émuler un double-clic en utilisant subprocess? Fondamentalement, je veux ouvrir un fichier CSV dans Excel 2007.

+0

Je pense que 'subprocess.call (r'C: \ myfile.csv ', shell = True)' devrait le faire (pas sûr, et 'os.startfile' est plus propre). –

+0

@Chris: J'ai effectivement utilisé 'shell = True', j'ai oublié de l'inclure dans la question. Utiliser 'shell = True' produirait l'erreur que j'ai mentionnée ci-dessus. – Kit

+0

Je pense que vous avez manqué le fait que Chris a utilisé une corde brute avec un backslash pour son chemin et vous ne l'avez pas fait dans le vôtre (et la différence peut être significative). – martineau

Répondre

7
os.startfile(r'C:\myfile.csv') 

(Win32 uniquement pour Mac, exécuter un processus avec 'open filename';.. Sur Linux/freedesktop en général, 'xdg-open filename')

+0

+1. 'subprocess.call' essaie d'exécuter quelque chose en tant qu'exécutable. Votre fichier CSV n'est pas un exécutable; ce sont des données pour un. Chaque plate-forme a sa propre application utilitaire pour «déterminer le type de fichier et le transmettre à l'application appropriée», ce que vous essayez réellement de faire. –

1

Je pense Une partie de votre problème est que vous utilisez un slash style Unix/comme un séparateur de chemin, au lieu de la barre oblique inverse de Windows. Il semble que Windows interprète /myfile.csv comme argument pour le programme C:, ce qui explique pourquoi vous recevez ce message.

Toutefois, si vous corrigiez cela, je pense que vous l'obtiendriez en disant que C:\myfile.csv n'est pas un programme.

0

Je sais que c'est un peu en retard, mais pour faire cela dans python 2.x (pas sûr de 3), vous devriez utiliser le module subprocess, en référence Popen. Voici le code:

import subprocess 
subprocess.Popen(r'explorer /select, "C:\"') 

Il ouvre essentiellement le fichier, puis l'ouvre dans le programme par défaut.