在Python中使用子进程,在Python cmd和Python IDLE中会得到不同的结果

时间:2018-07-05 12:29:04

标签: python command-line subprocess

我希望标题有意义。具体说明:

我正在使用csvtotable(https://github.com/vividvilla/csvtotable)从CSV生成HTML表。我已经通过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 :(得分:0)

通过找到一种无需子进程即可调用函数的方法来解决。我认为这个问题可能与通过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)

请注意,必须在参数名称中带有-的地方更改参数名称。我只是更改了任何实例在convert.py中从display-lengthdisplay_length