Я пытаюсь поместить файл CSV в стандартный вывод и затем передать распечатанный вывод в качестве входных данных в программу на языке Python, которая также принимает системный вектор аргумента с 1 аргументом. Я столкнулся с проблемой, которая, я думаю, напрямую связана с тем, как функция Python fileinput.input () реагирует на занятие дескриптора файла stdin.
generic_user% cat my_data.csv | python3 my_script.py myarg1
Вот пример программы на Python:
import sys, fileinput
def main(argv):
print("The program doesn't even print this")
data_list = []
for line in fileinput.input():
data_list.append(line)
if __name__ == "__main__":
main(sys.argv)
Если я попытаюсь запустить этот пример программы с помощью приведенной выше команды терминала и без аргумента myarg1, программа сможет оценить и проанализировать стандартный вывод данных, выводимых из файла CSV.
Если я запустлю программу с аргументом myarg1, она выдаст ошибку FileNotFoundError, непосредственно связанную с myarg1, не существующим в виде файла.
FileNotFoundError: [Errno 2] No such file or directory: 'myarg1'
Может ли кто-нибудь подробно объяснить, почему такое поведение имеет место в Python и как обрабатывать логику так, чтобы программа на Python могла сначала обработать данные stdin, прежде чем argv перезапишет дескриптор stdin?