Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python3.7将argv元素与';垃圾';_Python_Linux_Bash_Shell_Arguments - Fatal编程技术网

为什么python3.7将argv元素与';垃圾';

为什么python3.7将argv元素与';垃圾';,python,linux,bash,shell,arguments,Python,Linux,Bash,Shell,Arguments,在我决定重写所有内容并使其可移植之前,我让这个脚本为我工作。 在不深入研究细节的情况下,有一个中央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-g

在我决定重写所有内容并使其可移植之前,我让这个脚本为我工作。 在不深入研究细节的情况下,有一个中央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脚本时,它会用逗号和换行符读入文本文件。我已经仔细检查过,我可以确认
组#.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()
脚本随后继续在IPs上做一些工作,但这是最痛苦的部分。如果我直接从CLI调用脚本:
/2fast-ping.py../dos.3/group0.txt
,则文本处理正确,替换指令实际起作用。但是,当从第一个init脚本调用时,程序本身基本上是sh*ts,因为每一行都用逗号读入。它一直工作到开始使用处理后的信息,然后:

<actual IP would be here>
ping: ('##.###.###.###',): Name or service not known

ping:(“##############,):名称或服务未知
当然,问题是(“”),但是Python正在添加它,我不知道如何阻止它:(


有什么想法吗?

Python代码没问题,只是传递了一个附加的/和参数:(

只是一个粗略的猜测,但是您在这里展示的:
(“##########,)
看起来非常像一个元素元组的字符串表示形式。请确保将单个字符串而不是元组传递给2fast-ping.py。这很有意义。然后,我的下一个问题是:如何将文本文件作为单个字符串而不是元组来读取?我将尝试在readli中使用while循环ne()语句,如果不起作用,则返回给您。好的,因此,使用上下文管理器读取数组似乎也不起作用:/但是,即使使用with open(filename)作为f,我也可以直接从CLI调用脚本,但不能从中央bash脚本调用。您的文件(group0.txt等)是吗静态的还是由init脚本动态创建的?另外:您如何在代码中调用ping(似乎您省略了这一部分)?在解释时,它们是静态的。我使用自定义ping命令的子进程调用将ping作为bash脚本调用,但是使用ThreadPoolExecutor调用ping以加快进程。实际的bash ping脚本如下所示: