Почему python3 .7 передает элементы argv вместе с 'мусором' - PullRequest
0 голосов
/ 19 февраля 2020

У меня был этот сценарий для меня, прежде чем я решил, что я все перепишу и сделаю его переносимым. Не вдаваясь в детали, есть центральный скрипт 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 и выполняет запись в файлы в одном каталоге, так что ими можно манипулировать различными способами, прежде чем читать их обратно в разные части программы.

Я понимаю, что самый быстрый способ сделать это - написать монолитный c 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, текст обрабатывается ПРАВИЛЬНО, а действующие инструкции фактически работают. Но при вызове из первого скрипта инициализации программа в основном sh* ts сама, потому что каждая строка читается через запятую. Он работает до того момента, когда он начинает использовать обработанную информацию, затем:

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

Конечно, проблема заключается в ('',) Но, Python добавляет это в, и я не Не знаю, как это остановить :(

Есть идеи?

1 Ответ

0 голосов
/ 19 февраля 2020

Python код был в порядке, просто передав дополнительный / с аргументом: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...