Каково возвращаемое значение subprocess.call ()?

Это появляется из статьи MSDN, которую Вы связали с ним, был обеспечен для обеспечения nullable булевых типов до Nullable (т.е. интервал?, bool?, и т.д.) тип, являющийся introducted на язык в C#2. Таким образом Вы сохранили бы внутреннее значение, указывающее, является ли значение TRUE или FALSE или пустым указателем, т.е. в Вашем примере> 0 для истинного, < 0 для лжи и == 0 для пустого указателя, и затем Вы получили бы семантику пустого указателя стиля SQL. Необходимо было бы также реализовать.IsNull метод или свойство, чтобы ничтожность могла быть проверена явно.

По сравнению с SQL, вообразите таблицу Table с 3 строками со значением набором Foo к истинному, 3 строкам со значением набор Foo ко лжи и 3 строкам со значением Foo установленный в NULL.

SELECT COUNT(*) FROM Table WHERE Foo = TRUE OR Foo = FALSE
6

для подсчета всех строк, необходимо было бы сделать following:-

SELECT COUNT(*) FROM Table WHERE Foo = TRUE OR Foo = FALSE OR Foo IS NULL
9

, Это 'ЯВЛЯЕТСЯ ПУСТЫМ' синтаксисом, имел бы код equivilent в классе как.IsNull ().

LINQ делает сравнение с C# даже clearer:-

int totalCount = (from s in MyTypeEnumerable
                 where s || !s
                 select s).Count();

, Предполагая, что MyTypeEnumberable имеет точно то же содержание базы данных, т.е. 3 значения, равные истинному, 3 значения, равные лжи и 3 значениям, равным пустому указателю. В этом случае totalCount оценил бы к 6 в этом случае. Однако, если бы мы переписали as:-

int totalCount = (from s in MyTypeEnumerable
                 where s || !s || s.IsNull()
                 select s).Count();

кода Тогда totalCount, то оценил бы к 9.

пример DBNull, данный в связанной статье MSDN о ложном операторе, демонстрирует класс в BCL, который имеет это точное поведение.

В действительности заключение - Вы, не должен использовать это, если Вы не абсолютно уверены, что хотите этот тип поведения, лучше просто использовать намного более простой nullable синтаксис!!

Обновление: я просто заметил, что необходимо вручную переопределить логические операторы!, || и & & сделать эту работу правильно. Я верю ложной подаче оператора в эти логические операторы, т.е. указанию на истину, ошибочность или 'иначе'. Как отмечено в другом комментарии! x не отделается от летучей мыши; необходимо перегрузиться!. Странность!

37
задан David Cain 7 June 2012 в 16:32
поделиться

3 ответа

Да, Subprocess.call возвращает «фактический код возврата процесса».

Вы можете проверить официальную документацию Subprocess.call и Subprocess.Popen.returncode

29
ответ дан 27 November 2019 в 04:57
поделиться

Это код возврата, но имейте в виду что означает код возврата, зависит от автора подпроцесса. Существует сильная культура «0», означающая успех, но ее ничто не поддерживает.

10
ответ дан 27 November 2019 в 04:57
поделиться

Вы находитесь во власти команд, которые вы вызываете. Рассмотрим это:

test.py

#!/usr/bin/env python
success=False
if not success:
    exit()

Затем запуск вашего кода (с cmd = 'test.py') приведет к УСПЕХ !!

просто потому, что test.py не соответствует соглашению о возврате ненулевого значения в случае неудачи.

5
ответ дан 27 November 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: