Из официальной документации:
subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None, text=None)
Выполнить дочернюю программу в новом процессе. В POSIX класс использует os.execvp () -подобное поведение для выполнения дочерней программы. В Windows класс использует функцию Windows CreateProcess (). Аргументы Popen следующие:
args должна быть последовательностью программных аргументов или же одиночной строкой или объектом в виде пути. По умолчанию, программа для выполнения является первым элементом в args, если args - последовательность. Если args является строкой, интерпретация зависит от платформы и описана ниже. См. Shell и исполняемые аргументы для дополнительных отличий от поведения по умолчанию. Если не указано иное, рекомендуется передавать аргументы в виде последовательности.
Popen()
ожидает, что будет создан только один дочерний процесс. Итак, первая команда считается, а другие могут рассматриваться как дополнительные аргументы.
Отвечая @Maurice, вы можете использовать urllib
, чтобы получить URL-ответ. Если вы все еще хотите использовать подпроцесс для этой цели, тогда могут потребоваться изменения, такие как
responses = [str(subprocess.Popen(x.split(" "), shell = True, text = True, stdout = subprocess.PIPE).communicate()) for x in commands]
file_name = open('file_1', 'a')
file_name.writelines(responses)
Это может быть не очень хорошим вариантом, если у вас много URL-адресов для обработки.