Форум сайта python.su
Patrik?
viewer.py “С:\Мои документы\test.xml”
Офлайн
Если запускать из командной строки, то кавычки работают. Но если наводить файл tesr.xml на viewer.pyw, то скрип ломается.. так как в sys.argv из-за пробела один параметр распадается на два
Отредактировано Patrik (Ноя. 15, 2012 15:22:41)
Офлайн
PatrikНе могу воспроизвести. У меня все нормально.
Если запускать из командной строки, то кавычки работают. Но если наводить файл tesr.xml на viewer.pyw, то скрип ломается.. так как в sys.argv из-за пробела один параметр распадается на два
Офлайн
Речь идет не о ярлыке, в проводнике открыто две папки:
1. c:\veiwer\veiwer.pyw
2. любая папка с пробелом к примеру C:\Новая папка\test.xml
теперь просто перетягиваем test.xml на veiwer.pyw и у меня получается len(sys.argv) = 3
если запустить в консоле то равен 2
Офлайн
Странно, вот с таким скриптом все нормально:
import sys with open('d:/args_tst.txt', 'w') as f: f.write(repr(sys.argv))
Офлайн
Мне к сожалению сейчас не с эмулировать, когда путь с пробелами разбивает на несколько аргументов. Я сейчас в debiane, тут натаскивание файлов не работает.
команда для открытий внешних программ os.system - надежная?
Офлайн
Новая проблема (((
Откатил версию 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)
Офлайн
Внешняя программа откуда знает какой файл обрабатывать, по текущей директории?
Если ей невозможно передать путь до обрабатываемого файла в качестве аргумента, можно поменять текущую директорию до вызова
os.chdir(program_path)
Офлайн
Это было очевидно, но я как-то не узрел:) подправил код:
os.chdir(program_path)
os.system("test.exe")
Офлайн