Когда я впервые начал использовать некоторые методы подпроцесса, я столкнулся с некоторыми из тех же проблем.
Попробуйте запустить свой код следующим образом:
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']
(Выход команды отредактирован.)
Когда kwarg
shell
установлен наFalse
, что является значением по умолчанию, команда может быть коллекцией, которая является shlex .split делает.аргументы должны быть последовательностью программных аргументов или одной строкой. По умолчанию программа для выполнения является первым элементом в args, если args - последовательность. Если args является строкой, интерпретация зависит от платформы и описана ниже. См. Shell и исполняемые аргументы для дополнительных отличий от поведения по умолчанию. Если не указано иное, рекомендуется передавать аргументы в виде последовательности.
blockquote>Эта проблема беспрестанно смущала меня, пока я не нашел это в документации.
public static implicit operator T(SelectItem<T> obj) {
return obj.Item;
}