Найти - Пользователи
Полная версия: qt4 ассоциация файлов
Начало » GUI » qt4 ассоциация файлов
1 2
FishHook
Patrik
viewer.py “С:\Мои документы\test.xml”
?
Patrik
Если запускать из командной строки, то кавычки работают. Но если наводить файл tesr.xml на viewer.pyw, то скрип ломается.. так как в sys.argv из-за пробела один параметр распадается на два
reclosedev
Patrik
Если запускать из командной строки, то кавычки работают. Но если наводить файл tesr.xml на viewer.pyw, то скрип ломается.. так как в sys.argv из-за пробела один параметр распадается на два
Не могу воспроизвести. У меня все нормально.

Речь ведь идет о ярлыке на рабочем столе?
Patrik
Речь идет не о ярлыке, в проводнике открыто две папки:
1. c:\veiwer\veiwer.pyw
2. любая папка с пробелом к примеру C:\Новая папка\test.xml
теперь просто перетягиваем test.xml на veiwer.pyw и у меня получается len(sys.argv) = 3
если запустить в консоле то равен 2
reclosedev
Странно, вот с таким скриптом все нормально:
import sys
with open('d:/args_tst.txt', 'w') as f:
    f.write(repr(sys.argv))
Patrik
Мне к сожалению сейчас не с эмулировать, когда путь с пробелами разбивает на несколько аргументов. Я сейчас в debiane, тут натаскивание файлов не работает.
команда для открытий внешних программ os.system - надежная?
Patrik
Новая проблема (((
Откатил версию python на 3.2 в ней работает cx-freeze. Сделал exe.

В командной строке все работает.
При ассоциации не работает, уже сломал все голову ни чего не понимаю..
при ассоциации файл копируется в папку, где находится скрипт.
(Там где находится скрипт, есть внешняя программа которая видоизменяет xml.)
Внешняя программа отрабатывает, там где запустили ассоцированный файл, причем она обрабатывает его там, хотя физически она находится в папке со скриптом и обрабатывать должна там где скрипт.


# -*- coding: utf-8 -*-
import sys, os
from PyQt4 import QtCore, QtGui
from formviewer import Ui_MainWindow
import xml.etree.ElementTree as etree 
class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # или QWidget  QMainWindow
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setAcceptDrops(True)
        self.setupUi(self)
        QtCore.QObject.connect(self.action_2, QtCore.SIGNAL('triggered()'),QtGui.qApp, QtCore.SLOT('quit()'))
        QtCore.QObject.connect(self.action, QtCore.SIGNAL('triggered()'), self.showDialog)
		
	# обрабатываем параметры с коммандной строки
        try:
            input_file = sys.argv[1]
        except:
            input_file = None
        if input_file and input_file[-3:].upper() == "XML":
            program_path = os.path.realpath(os.path.dirname(sys.argv[0]))
            tempXmlFile = os.path.basename(input_file) 
            shutil.copy(input_file, program_path) #копируем xml в папку со скриптом
            os.system(os.path.join(program_path, "test.exe"))  # внешняя программа которая видоизменяет файл xml
            fileName = os.path.join(program_path, tempXmlFile)
            # отправляем на обработку в пассер
            self.showfile(fileName)	
          
    def showfile(self, fileName):
	# тут начинаем пассерить документ....
reclosedev
Внешняя программа откуда знает какой файл обрабатывать, по текущей директории?
Если ей невозможно передать путь до обрабатываемого файла в качестве аргумента, можно поменять текущую директорию до вызова
os.chdir(program_path)
Patrik
Это было очевидно, но я как-то не узрел:) подправил код:

os.chdir(program_path)
os.system("test.exe")

Всё заработало, всем спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB