python - 为什么 python3.7 将 argv 元素与“垃圾”一起传递
问题描述
在我决定重写所有内容并使其可移植之前,我有这个脚本为我工作。无需过多研究细节,这里有一个中央 Bash 脚本,它在各自的文件夹中调用 5 个其他 Bash 脚本。我不打算很快移植到 Windows,目前这仅适用于 Linux。
中央 Bash 脚本的执行路径为:
dos.1/1-init.sh dos.1/
dos.2/1-trace-to-file.sh dos.2/ dos.1/
dos.3/1-recognize-categories.sh dos.3/
dos.4/1-ping-in-groups.sh dos.4/ dos.3/
dos.5/init.sh dos.5/ dos.4/
我跑./init.sh
在脚本“可移植”之前,我在每个脚本中使用了显式文件路径。一切都很好。该程序本身是 Bash 和 Python 的组合,并写入一个目录中的文件,以便可以以各种方式操作它们,然后再读回程序的不同部分。
我知道最快的方法是编写一个单一的 Python 脚本,使用 Bash 方面的子进程调用......但是,我这样做是为了简化维护,并且(在我开始制作它之前)便携式')它快如闪电。
我现在的问题是:每次我必须将文本读入 Python(从 SQL 或从文件)时,总是会添加垃圾。到目前为止,我一直在使用 sed、awk 和 Python 的.rstrip()
函数来管理这个......这一切都很好,但是这个该死的函数不会玩得很好......而且我觉得必须有更好的方法。
在 bash 中,我将其称为:
$prog_dir=$1
$data_dir=$2
$prog_dir/2fast-ping.py $data_dir/group0.txt > $prog_dir/group0_averages.txt
$prog_dir/2fast-ping.py $data_dir/group1.txt > $prog_dir/group1_averages.txt
...
现在我知道我可以从 Python 中写入文件,但在这种情况下我有其他理由不这样做。
问题是,当 2fast-ping.py 脚本运行时,它会用逗号和换行符读取文本文件。我已经大力检查,我可以确认group#.txt
文件 100% 不包含逗号。这是Python:
import sys
import subprocess
import select
from concurrent.futures import ThreadPoolExecutor
filename = sys.argv[1]
f = open(filename, "r")
ips = [elem.rstrip('\n') for elem in f]
print(ips)
f.close()
之后脚本继续对 IP 做一些工作,但这是痛苦的部分。如果我直接从 CLI: 调用脚本 ./2fast-ping.py ../dos.3/group0.txt
,则会正确处理文本,并且取代指令实际上会起作用。但是,当从第一个 init 脚本调用时,程序基本上 sh*ts 本身,因为每一行都是用逗号读入的。它一直工作到它开始使用处理后的信息,然后:
<actual IP would be here>
ping: ('##.###.###.###',): Name or service not known
当然,问题是 ('',) 但是,Python 正在添加它,我不知道如何阻止它:(
有任何想法吗?
解决方案
Python 代码没问题,只需传递一个额外的 / 和参数 :(
推荐阅读
- azure - 如何将自签名证书导入 azure keyvault
- python - 代码出现 2015 年第 7 天意外放缓
- javascript - 有没有办法使用对象数组来填充查询器中的选择?
- list - 如何垂直打印列表元素?球拍
- android-recyclerview - 根据 Volley JSON 响应以编程方式将 RecyclerView itemTextView 设置为 BOLD?
- python-3.x - 在多分区主题上正确查找和使用 Kafka 消息
- c# - 创建并运行默认主机后如何访问服务提供者?
- http - HTTP 健康检查 - GET 或 HEAD 以及 200 或 204 响应?
- ios - “translatesAutoresizingMaskIntoConstraints”实际上是如何工作的?
- django - 我可以制作一个 Django mixin,在模板渲染之前添加上下文变量吗?