Используя подпроцесс в Python, я получаю разные результаты, когда в Python cmd и Python IDLE - PullRequest
0 голосов
/ 05 июля 2018

Надеюсь, название имеет смысл. Для уточнения:

Я использую csvtotable (https://github.com/vividvilla/csvtotable) для генерации таблиц HTML из CSV. Я установил через pip и могу запустить команду командной строки:

csvtotable test1743.csv test1743.html

для создания HTML-страницы. Пока все хорошо.

Я хотел сделать это из скрипта Python, который я уже написал, поэтому я услышал, что подпроцесс - это способ сделать это. Я посмотрел, как это сделать, и понял, что это можно сделать с помощью следующего:

subprocess.run('csvtotable test1743.csv test1743.html',shell=True)

Итак, я сначала проверил это с помощью командной строки, выполнив

python

из командной строки и затем запустить

import subprocess
subprocess.run('csvtotable test1743.csv test1743.html',shell=True)

Успех! Это сработало. Фантастическая.

Однако, когда я пытаюсь сделать это из IDLE, он просто возвращает 1. Я проверил каталог, думая, что, возможно, CSV отсутствует там, но он все еще не работает.

Я неправильно понимаю, как работает подпроцесс?

1 Ответ

0 голосов
/ 05 июля 2018

Решено путем нахождения способа вызова функции без подпроцесса. Я думаю, что проблема может быть связана с тем, что аргументы по умолчанию не устанавливаются, когда он выполняется через python, и, следовательно, почему ниже мне пришлось указать так много аргументов.

Код:

from csvtotable import convert

content = convert.convert("C:\\Users\\admin\\Google Drive\\test1743.csv",delimiter=",",quotechar='"',display_length=-1,overwrite=False,serve=False,pagination=True,virtual_scroll=1000, no_header=False, export=True, export_options=["copy","csv","json","print"])
convert.save("C:\\Users\\admin\\Google Drive\\test1743.html",content)

Обратите внимание, что имена аргументов нужно было менять там, где в имени было -. Я просто изменил любой экземпляр, например display-length до display_length в convert.py

...