Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2012 14:14:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Patrik
viewer.py “С:\Мои документы\test.xml”
?



Офлайн

#2 Ноя. 15, 2012 15:02:35

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Если запускать из командной строки, то кавычки работают. Но если наводить файл tesr.xml на viewer.pyw, то скрип ломается.. так как в sys.argv из-за пробела один параметр распадается на два



Отредактировано Patrik (Ноя. 15, 2012 15:22:41)

Офлайн

#3 Ноя. 15, 2012 17:53:44

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Patrik
Если запускать из командной строки, то кавычки работают. Но если наводить файл tesr.xml на viewer.pyw, то скрип ломается.. так как в sys.argv из-за пробела один параметр распадается на два
Не могу воспроизвести. У меня все нормально.

Речь ведь идет о ярлыке на рабочем столе?

Офлайн

#4 Ноя. 15, 2012 19:12:50

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Речь идет не о ярлыке, в проводнике открыто две папки:
1. c:\veiwer\veiwer.pyw
2. любая папка с пробелом к примеру C:\Новая папка\test.xml
теперь просто перетягиваем test.xml на veiwer.pyw и у меня получается len(sys.argv) = 3
если запустить в консоле то равен 2



Офлайн

#5 Ноя. 15, 2012 19:24:12

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Странно, вот с таким скриптом все нормально:

import sys
with open('d:/args_tst.txt', 'w') as f:
    f.write(repr(sys.argv))

Офлайн

#6 Ноя. 15, 2012 19:50:24

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Мне к сожалению сейчас не с эмулировать, когда путь с пробелами разбивает на несколько аргументов. Я сейчас в debiane, тут натаскивание файлов не работает.
команда для открытий внешних программ os.system - надежная?



Офлайн

#7 Ноя. 16, 2012 15:39:59

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Новая проблема (((
Откатил версию 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):
	# тут начинаем пассерить документ....



Отредактировано Patrik (Ноя. 16, 2012 15:41:57)

Офлайн

#8 Ноя. 16, 2012 15:49:56

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Внешняя программа откуда знает какой файл обрабатывать, по текущей директории?
Если ей невозможно передать путь до обрабатываемого файла в качестве аргумента, можно поменять текущую директорию до вызова

os.chdir(program_path)

Офлайн

#9 Ноя. 19, 2012 08:51:40

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

qt4 ассоциация файлов

Это было очевидно, но я как-то не узрел:) подправил код:

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

Всё заработало, всем спасибо!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version