当python2是defau时,尝试从批处理文件调用python3脚本

2024-05-14 05:41:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个批处理文件,它主要调用python2脚本,但是在一开始它需要调用python3脚本。在

我的python2路径(默认情况下,这是我调用Python-V时返回的路径):

C:\Python27\python.exe

Python我的路径3:

^{pr2}$

(奇怪的文件结构是因为我使用了一个预先构建的python安装附带的IDE)

这是批处理文件(我不知道是否需要timeout命令):

for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 1252>nul
start C:\Users\Isaac\Anaconda3\python.exe opennorth_downloader.py %1
timeout /t 10 /nobreak
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Bloc_Québécois.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Bloc_Québécois.json F:\electoral_map\%1\candidates\candidates_Bloc_Québécois.outline.json -o F:\electoral_map\%1\candidates\Bloc_Québécois.csv
del F:\electoral_map\%1\candidates\candidates_Bloc_Québécois.json
del F:\electoral_map\%1\candidates\candidates_Bloc_Québécois.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Christian_Heritage.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Christian_Heritage.json F:\electoral_map\%1\candidates\candidates_Christian_Heritage.outline.json -o F:\electoral_map\%1\candidates\Christian_Heritage.csv
del F:\electoral_map\%1\candidates\candidates_Christian_Heritage.json
del F:\electoral_map\%1\candidates\candidates_Christian_Heritage.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Conservative.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Conservative.json F:\electoral_map\%1\candidates\candidates_Conservative.outline.json -o F:\electoral_map\%1\candidates\Conservative.csv
del F:\electoral_map\%1\candidates\candidates_Conservative.json
del F:\electoral_map\%1\candidates\candidates_Conservative.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Forces_et_Démocratie.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Forces_et_Démocratie.json F:\electoral_map\%1\candidates\candidates_Forces_et_Démocratie.outline.json -o F:\electoral_map\%1\candidates\Forces_et_Démocratie.csv
del F:\electoral_map\%1\candidates\candidates_Forces_et_Démocratie.json
del F:\electoral_map\%1\candidates\candidates_Forces_et_Démocratie.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Green_Party.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Green_Party.json F:\electoral_map\%1\candidates\candidates_Green_Party.outline.json -o F:\electoral_map\%1\candidates\Green_Party.csv
del F:\electoral_map\%1\candidates\candidates_Green_Party.json
del F:\electoral_map\%1\candidates\candidates_Green_Party.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Liberal.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Liberal.json F:\electoral_map\%1\candidates\candidates_Liberal.outline.json  -o F:\electoral_map\%1\candidates\Liberal.csv
del F:\electoral_map\%1\candidates\candidates_Liberal.json
del F:\electoral_map\%1\candidates\candidates_Liberal.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_Libertarian.json
json2csv.py F:\electoral_map\%1\candidates\candidates_Libertarian.json F:\electoral_map\%1\candidates\candidates_Libertarian.outline.json -o F:\electoral_map\%1\candidates\Libertarian.csv
del F:\electoral_map\%1\candidates\candidates_Libertarian.json
del F:\electoral_map\%1\candidates\candidates_Libertarian.outline.json
gen_outline.py --collection objects F:\electoral_map\%1\candidates\candidates_NDP.json
json2csv.py F:\electoral_map\%1\candidates\candidates_NDP.json F:\electoral_map\%1\candidates\candidates_NDP.outline.json -o F:\electoral_map\%1\candidates\NDP.csv
del F:\electoral_map\%1\candidates\candidates_NDP.json
del F:\electoral_map\%1\candidates\candidates_NDP.outline.json
chcp %cp%>nul
pause

我知道除了这条线,一切都正常:

start C:\Users\Isaac\Anaconda3\python.exe opennorth_downloader.py %1

(批处理文件在没有它的情况下运行时是有效的,它预先设置了它)

这是它引用的脚本:

from sys import argv
import urllib

party_name_list = ["Conservative", "Liberal", "NDP", "Green Party", "Bloc Québécois", "Forces et Démocratie", "Libertarian", "Christian Heritage"]

for party_name in party_name_list:
    with urllib.request.urlopen(r"https://represent.opennorth.ca/candidates/house-of-commons/?limit=1000&party_name={}".format(urllib.parse.quote_plus(party_name))) as url:
        with open(r"F:\electoral_map\{0}\candidates\candidates_{1}.json".format(argv[1], party_name.replace(' ', '_')), "wb+") as f:
            f.write(url.read())
    print("finished {0}".format(party_name))
print("all done")

批处理文件用一个参数调用:“20150915”,它表示一个日期,并将所有内容指向包含所有内容的单个文件夹。在

有人能看出问题行失败的原因吗?它看起来像是根据this应该是什么


Tags: csvpyjsonmapobjectscollectiongencandidates
1条回答
网友
1楼 · 发布于 2024-05-14 05:41:15

经过一番挖掘和捣乱,我终于解决了这个问题。由于某些未知原因,.bat无法识别urllib的“request”模块,除非它被显式导入,如下所示:

from sys import argv
from urllib import request
from urllib import parse

party_name_list = ["Conservative", "Liberal", "NDP", "Green Party", "Bloc Québécois", "Forces et Démocratie", "Libertarian", "Christian Heritage"]

for party_name in party_name_list:
    with request.urlopen(r"https://represent.opennorth.ca/candidates/house-of-commons/?limit=1000&party_name={}".format(parse.quote_plus(party_name))) as url:
        with open(r"F:\electoral_map\{0}\candidates\candidates_{1}.json".format(argv[1], party_name.replace(' ', '_')), "wb+") as f:
            f.write(url.read())
    print("finished {0}".format(party_name))
print("all done")

然后使用与上面相同的批处理文件,它就可以正常工作了。我不知道为什么,但在这一点上,我很高兴它起作用了:)

相关问题 更多 >