Как передать аргумент из Total Commander в скрипт Python. Я использую правильную среду? - PullRequest
0 голосов
/ 31 марта 2020

Полагаю, у меня очень простая проблема, но на самом деле я застрял в том, чтобы выяснить, где именно проблема.

Моя задача - запустить скрипт Python из Total Commander (T C) командная строка с именем файла в качестве аргумента.

Я использую Python 3.7.4. Анаконда связана в моих переменных окружения, а файлы * .py связаны в T C:

Код теста:

from docx import Document
from sys import argv

inputfilename = argv[1]

document = Document()
document.save(str(inputfilename) + '_test.docx')

Появляется следующее сообщение об ошибке:

n:\TECHNOLOGY\Products\00_00_ALL_Product\Lasten\_Parafix\3.XM-NES\8.20_Euros\_De
finition_Validierung_Tower>test.py test
Traceback (most recent call last):
  File "N:\TECHNOLOGY\Products\00_00_ALL_Product\Lasten\_Parafix\3.XM-NES\8.20_E
uros\_Definition_Validierung_Tower\Test.py", line 8, in <module>
    from docx import Document
  File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\__init__.py", line 3, in <module>
    from docx.api import Document  # noqa
  File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\api.py", line 14, in <module>
    from docx.package import Package
  File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\package.py", line 9, in <module>
    from docx.opc.package import OpcPackage
  File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\opc\package.py", line 9, in <module>
    from docx.opc.part import PartFactory
  File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\opc\part.py", line 12, in <module>
    from .oxml import serialize_part_xml
  File "C:\Users\klaus.sandel\AppData\Local\Continuum\anaconda3\lib\site-package
s\docx\opc\oxml.py", line 12, in <module>

from lxml import etree
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.

На самом деле в указанной папке нет такого файла o xml .py.

Тем не менее, когда я запускаю код без аргументов в Spyder :

from docx import Document
from sys import argv

#inputfilename = argv[1]
inputfilename = "TEST"

document = Document()
document.save(str(inputfilename) + '_test.docx')

Документ "TEST_test.docx" создан, поэтому я считаю, что ошибка - это отсутствующая DLL.

Я подозреваю, что Spyder использует другую среду в качестве оболочки команд (к сожалению, У меня было несколько сред). Поэтому я удалил все среды, кроме базовой, с помощью Anaconda Navigator. Так что у меня осталось только базовое окружение. Код работает без аргументов от Spyder, но не с аргументами из командной строки T C.

Еще одна странная вещь, которую я не понимаю, это когда я вызываю Python .exe из T C командная строка:

Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Ana
conda, Inc. on win32

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated.  Libraries may fail to load.  To activate this environment
please see https://conda.io/activation

Когда я вызываю 'python .exe' из Anaconda Prompt, все выглядит нормально:

(base) C:\>python.exe
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Ana
conda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.

Когда я могу активировать базовую среду из оболочки Cmd ( запускается с T C) и вызывает скрипт в командной оболочке, он как-то работает, но не так, как ожидалось (я добавил 'print (argv)' в код):

(base) n:\TECHNOLOGY\Products\00_00_ALL_Product\Lasten\_Parafix\3.XM-NES\8.20_Eu
ros\_Definition_Validierung_Tower>Test.py TEST2
['N:\\TECHNOLOGY\\Products\\00_00_ALL_Product\\Lasten\\_Parafix\\3.XM-NES\\8.20_
Euros\\_Definition_Validierung_Tower\\Test.py']

Кажется, что только первый аргумент (сам скрипт) найден. Но не "TEST2".

Тем не менее, из командной строки T C ответ остается прежним: o xml .py DLL не найдена ...

Кто-нибудь Идея, как заставить T C запустить python в правильной среде и прочитать мои аргументы? Огромное спасибо заранее!

Пожалуйста, дайте мне сейчас, если вам нужна дополнительная информация!

BR Klaus

1 Ответ

0 голосов
/ 01 апреля 2020

Я уже нашел решение здесь: stackoverflow вопрос 54063285

Я следовал инструкции и добавил

C:\Users\<myusername>\AppData\Local\Continuum\Anaconda3\Scripts\
C:\Users\<myusername>\AppData\Local\Continuum\Anaconda3\Library\bin\

к моим PATH переменным.

Кроме того, недостаточно вызвать только скрипт и аргумент, мне также нужно вызвать python .exe в командной строке T C:

python.exe test.py TEST

Результат равен TEST_test.doc, как и ожидалось.

...