RFC 2396 раздел 4.1:
Когда ссылка URI используется для выполнения поиска по идентифицированному ресурсу, необязательный идентификатор фрагмента, отделенный от URI посредством символа crosshatch ("#"), состоит из дополнительной справочной информации, которая должна быть интерпретирована пользовательским агентом после успешного завершения поиска. Таким образом, он не является частью URI, но часто используется в сочетании с URI.
blockquote>(выделено мной)
Когда я впервые начал использовать некоторые методы подпроцесса, я столкнулся с некоторыми из тех же проблем.
Попробуйте запустить свой код следующим образом:
import datetime
import subprocess
import shlex
startdate = datetime.datetime(2010, 4, 9) + datetime.timedelta(days=1)
enddate = datetime.datetime(2010, 4, 10) + datetime.timedelta(days=1)
command = (
"sudo mam-list-usagerecords -s "
+ str(startdate)
+ "-e"
+ str(enddate)
+ " --format csv --full"
)
print(command)
print(type(command))
print(shlex.split(command))
subprocess.call(shlex.split(command))
ВЫХОД:
sudo mam-list-userecords -s 2010-04-10 00: 00: 00-e2010 -04-11 00:00:00 --format csv --full
class 'str'
['sudo', 'mam-list-userecords', '-s', '2010-04-10', '00: 00: 00-e2010-04-11 ', '00: 00: 00', '--format', 'csv', '--full']
< / blockquote>(Выход команды отредактирован.)
Когда kwarg
shell
установлен наFalse
, что является значением по умолчанию, команда может быть коллекцией, которая является shlex .split делает.аргументы должны быть последовательностью программных аргументов или одной строкой. По умолчанию программа для выполнения является первым элементом в args, если args - последовательность. Если args является строкой, интерпретация зависит от платформы и описана ниже. См. Shell и исполняемые аргументы для дополнительных отличий от поведения по умолчанию. Если не указано иное, рекомендуется передавать аргументы в виде последовательности.
blockquote>Эта проблема беспрестанно смущала меня, пока я не нашел это в документации.