- 命令行参数模块:argparse
- 打包:PyInstaller
遗留问题:
- 命令行参数为多个单词时不能用单引号?
- 增加功能:错误日志,缓存啥的
1.程序文件trans.py
import requests, time, hashlib, random, json
import argparse
# 请求地址和请求头
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '239',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': '[email protected]; OUTFOX_SEARCH_USER_ID_NCOO=1606744505.8724139; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcTTc7n1DBzJ63Dw_4Ow; _ntes_nnid=04359c568b1008fcef153722370d20df,1555734032084; ___rl__test__cookies=1555739165615',
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/?keyfrom=dict2.top',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
def generate_query_data(query):
ts = str(int(time.time() * 1000))
salt = str(ts) + str(random.randint(0,10))
md5 = hashlib.md5()
md5.update(("fanyideskweb" + query + salt + "@6f#X3=cCuncYssPsuRUE").encode())
sign = md5.hexdigest()
query_data = {
'i': query,
'salt': salt,
'sign': sign,
'ts': ts,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'bv': 'f8c295588ce195d0453511f751132244',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}
return query_data
def trans(query, show_all):
query_data = generate_query_data(query)
resp = requests.post(url, data=query_data, headers=headers)
resp.encoding = 'utf-8'
resp_data = json.loads(resp.text)
try:
trans_result = resp_data["translateResult"][0][0]['tgt']
print(query, '的解释为:', trans_result)
except Exception as e:
print('查询错误')
if show_all:
print(resp_data)
if __name__ == '__main__':
# 构建接受参数的对象
parser = argparse.ArgumentParser()
parser.description = 'Command line translation tool'
# 程序的名称,默认为sys.argv[0],即文件名,后面可以使用 %(prog)s 引用该变量
parser.prog = 'translate v1.0'
# 定义必选参数,不加-
parser.add_argument('query', help='Content to be translated')
# 定义可选参数,加-或--
# action:表示出现此参数时如何进行保存,默认为action='store',表示保存输入的值
# action='store_true'表示出现此参数则保存为True,否则为False,命令行中不能再给值了
parser.add_argument('-a', '--all', action='store_true', help='show all')
# 打印关于程序的版本信息,然后退出
parser.add_argument('-v', '--version', action='version', version='%(prog)s')
# 解析得到参数对象
args = parser.parse_args()
query = args.query
show_all = args.all
trans(query, show_all)
2.打包
# 最好新建个虚拟环境打包,打出来的包比较小
pip install pyinstaller
# 打包生成一个单独可执行的exe文件,在dist目录下
pyinstaller -F trans.py
# 这个是打包成一个目录,依赖和exe文件都在一个目录里,默认就是-D模式
pyinstaller -D trans.py
# 将exe文件放入python的环境变量中或新增一个环境变量
3.linux打包
打包流程一样,如果报错可能是python安装的时候少设置了参数
centos安装python3:https://blog.csdn.net/weixin_43667990/article/details/96459920
4.演示
C:\Users\77962>trans today
today 的解释为: 今天
C:\Users\77962>trans "hello world"
hello world 的解释为: 你好,世界
C:\Users\77962>trans tiger -a
tiger 的解释为: 老虎
{'type': 'EN2ZH_CN', 'errorCode': 0, 'elapsedTime': 1, 'translateResult': [[{'src': 'tiger', 'tgt': '老虎'}]]}
C:\Users\77962>trans -v
translate v1.0
C:\Users\77962>trans -h
usage: translate v1.0 [-h] [-a] [-v] query
Command line translation tool
positional arguments:
query Content to be translated
optional arguments:
-h, --help show this help message and exit
-a, --all show all
-v, --version show program's version number and exit
参考:
argparse模块:https://blog.csdn.net/qq_35696312/article/details/88634451
https://blog.csdn.net/weixin_43667990/article/details/89417822