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