ti-enxame.com

Como posso abrir arquivos em programas externos no Python?

Gostaria de saber como abrir arquivos em programas como o Bloco de Notas e o Picture Viewer, dependendo da extensão do arquivo. Estou usando o Python 3.3 no Windows.

Eu fiz algumas pesquisas e as pessoas mencionaram um módulo chamado Image, mas quando tento importar este módulo, recebo um ImportError.

Aqui está o que eu tenho até agora:

def openFile():
    fileName = listbox_1.get(ACTIVE)
    if fileName.endswith(".jpg"):
        fileName.open()

Também terei arquivos HTML e JSON que precisarei abrir no Bloco de Notas.

12
user1816467

Use isso para abrir qualquer arquivo com o programa padrão:

import os
def openFile():
    fileName = listbox_1.get(ACTIVE)
    os.system("start " + fileName)

Se você realmente deseja usar um determinado programa, como o bloco de notas, pode fazê-lo assim:

import os
def openFile():
    fileName = listbox_1.get(ACTIVE)
    os.system("notepad.exe " + fileName)

Além disso, se você precisar de algumas verificações antes de abrir o arquivo, fique à vontade para adicioná-las. Isso mostra apenas como abrir o arquivo.

8
user2032433

No Windows, você pode usar os.startfile() para abrir um arquivo usando o aplicativo padrão:

import os
os.startfile(filename)

Não existe shutil.open() que faria isso em várias plataformas. A aproximação aproximada é webbrowser.open() :

import webbrowser
webbrowser.open(filename)

que pode usar automaticamente o comando open no OS X, os.startfile() no Windows, xdg-open ou similar no Linux.

Se você deseja executar um aplicativo específico, pode usar subprocess module por exemplo, Popen() permite iniciar um programa sem esperar pela conclusão:

import subprocess

p = subprocess.Popen(["notepad.exe", fileName])
# ... do other things while notepad is running
returncode = p.wait() # wait for notepad to exit

Existem várias maneiras de usar o módulo subprocess para executar programas, por exemplo, subprocess.check_call(command) bloqueia até que o comando termine e gera uma exceção se o comando terminar com uma saída diferente de zero código.

21
jfs

Expandindo a sugestão de FatalError com um exemplo.

Um benefício adicional de usar subprocessing em vez de os.system É que ele usa a mesma sintaxe de plataforma cruzada (os.system No Windows requer um "início" no início, enquanto o OS X requer e "aberto". Não é um grande negócio, mas uma coisa a menos para se lembrar).

Abrindo um arquivo com subprocess.call.

Tudo o que você precisa para iniciar um programa é chamar subprocess.call() e classificar em list de argumentos em que o primeiro é o caminho para o programa e o restante são argumentos adicionais que você deseja fornecimento para o programa que você está lançando.

Por exemplo, para iniciar o Notepad.exe

import subprocess
import os


path_to_notepad = 'C:\\Windows\\System32\\notepad.exe'
path_to_file = 'C:\\Users\\Desktop\\hello.txt'

subprocess.call([path_to_notepad, path_to_file])

Passar vários argumentos e caminhos é igualmente simples. Basta adicionar itens adicionais à lista.


Iniciando com vários argumentos

Isso, por exemplo, inicia um arquivo JAR usando uma cópia específica do ambiente de tempo de execução Java.

import subprocess
import os

current_path = os.getcwd()
subprocess.call([current_path + '/contents/home/bin/Java', # Param 1
                    '-jar', #Param2
                    current_path + '/Whoo.jar']) #param3

O argumento 1 tem como alvo o programa que quero iniciar. O Argument2 fornece um argumento para nesse programa dizendo que ele executará um JAR e, finalmente, o Argument3 diz ao programa de destino onde encontrar o arquivo a ser aberto.

5
Zack Yoshyaro