2017-02-17 37 views
0

У меня есть цикл из python, который записывает прокси-файлы в файл, по одному в каждой строке. Этот файл позже используется из сценария bash через curl -x $PROXY, строка за строкой, используя cat proxies.txt.Напишите одну строку из одного процесса и потребляйте одну строку от другого

Можно ли улучшить этот подход, одновременно запустив два сценария и используя именованный канал, который может быть использован cat, только когда python записывает новую строку/новый прокси?

На мой взгляд, я бы написать что-то вроде

f = open('/tmp/proxies', 'w') # but this call is blocking! 
for proxy in ...: 
    f.write(proxy) 

и

for PROXY in $(cat /tmp/proxies); do curl -x $PROXY example.com; done 
+0

Почему бы не начать этот вызов curl внутри скрипта python? Или используя API-интерфейс curl python. – languitar

+0

@languitar подход, который вы предлагаете оставить мой код последовательным, в то время как я хотел бы начать два процесса одновременно – giuscri

+0

FIFO не обеспечивает постоянство. Запись в блок FIFO, если нет читателя. Перед тем, как начать писать, запустите своего читателя из своей программы Python, но убедитесь, что вы запускаете его как отдельный процесс, и не ждите его завершения, прежде чем начинать писать. – Fred

ответ

1

Много комментариев по поводу блокирования FIFO; Я не буду повторять их, но основная проблема: когда процесс не читается, процесс записи блокируется.

Код, который вы могли бы искать что-то вроде этого:

#!/bin/bash 
python the_python_script.py & # start in the background 
tail -f /tmp/proxies| while read px; do 
    curl -x $px example.com 
done 

Там, вероятно, следует быть какая-то логика, чтобы закончить Баш скрипт, когда сценарий питона умирает.