Запуск команд CMD из Python [duplicate]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
366
задан Salvador Dali 11 May 2015 в 21:06
поделиться

8 ответов

Когда вы играете с переменными окружения (добавьте / измените / удалите переменные), хорошей практикой является восстановление предыдущего состояния при завершении функции.

Возможно, вам понадобится что-то вроде диспетчера контекстов modified_environ в этом вопросе для восстановления переменных среды.

Классическое использование:

with modified_environ(DEBUSSY="1"):
    call_my_function()
4
ответ дан Community 28 August 2018 в 02:42
поделиться

, если я делаю os.environ ["DEBUSSY"] = 1, он жалуется, что 1 должен быть строкой.

Затем выполните

os.environ["DEBUSSY"] = "1"

Я также хочу знать, как читать переменные среды в python (в более поздней части скрипта) после его установки.

Просто используйте os.environ["DEBUSSY"], как в

some_value = os.environ["DEBUSSY"]
17
ответ дан Jim Brissom 28 August 2018 в 02:42
поделиться

Возможно, вам придется рассмотреть некоторые дополнительные аспекты надежности кода:

, когда вы храните переменную с целым числом в качестве переменной среды, попробуйте

os.environ['DEBUSSY'] = str(myintvariable)

, затем для чтобы избежать ошибок, вы должны попробовать

os.environ.get('DEBUSSY', 'Not Set')

, возможно, заменить «-1» на «Не задано»

, поэтому, чтобы все это вместе

myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))

print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)
88
ответ дан Mark 28 August 2018 в 02:42
поделиться

Вы можете использовать словарь os.environ для доступа к своим переменным среды.

Теперь проблема заключалась в том, что если я попытался использовать os.system для запуска командного файла, который устанавливает переменные среды (используя команду SET в файле **. bat *), это не будет действительно установите их для вашей среды python (но для дочернего процесса, созданного с помощью функции os.system). Чтобы фактически получить переменные, установленные в среде python, я использую этот скрипт:

import re
import system
import os

def setEnvBat(batFilePath, verbose = False):
    SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE)
    SetEnvFile = open(batFilePath, "r")
    SetEnvText = SetEnvFile.read()
    SetEnvMatchList = re.findall(SetEnvPattern, SetEnvText)

    for SetEnvMatch in SetEnvMatchList:
        VarName=SetEnvMatch[0]
        VarValue=SetEnvMatch[1]
        if verbose:
            print "%s=%s"%(VarName,VarValue)
        os.environ[VarName]=VarValue
8
ответ дан Paolo 28 August 2018 в 02:42
поделиться

Вы должны назначить значение строки переменной среды.

os.environ["DEBUSSY"] = "1"

Если вы хотите прочитать или распечатать переменную окружения, просто используйте

print os.environ["DEBUSSY"]

. Эти изменения будут эффективный только для текущего процесса, в котором он был назначен, он не изменит значение навсегда. Детские процессы автоматически наследуют среду родительского процесса.

15
ответ дан RejeeshChandran 28 August 2018 в 02:42
поделиться

os.environ ведет себя как словарь python, поэтому можно выполнять все общие операции словаря. В дополнение к операциям get и set, упомянутым в других ответах, мы также можем просто проверить, существует ли ключ:

>>> import os
>>> os.environ.has_key('HOME')  # Check an existing env. variable
True
>>> os.environ.has_key('FOO')   # Check for a non existing variable
False
>>> os.environ['FOO'] = '1'     # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO')       # Retrieve the value
'1'

Следует отметить, что следует отметить использование os.environ :

Хотя дочерние процессы наследуют среду от родительского процесса, я недавно столкнулся с проблемой и выяснил, есть ли у вас другие скрипты, обновляющие среду, в то время как ваш скрипт python запущен, снова вызывая os.environ не будет отражать последние значения.

Выдержка из docs :

Это сопоставление выполняется при первом входе в модуль os, обычно во время запуска Python как часть обработки site.py. Изменения в окружающей среде, сделанные после этого времени, не отражаются в os.environ, за исключением изменений, внесенных путем изменения os.environ напрямую.

os.environ.data, который хранит все переменные среды, является dict, который содержит все значения среды:

>>> type(os.environ.data)  # changed to _data since v3.2 (refer comment below)
<type 'dict'>
19
ответ дан sisanared 28 August 2018 в 02:42
поделиться

Переменные среды должны быть строками, поэтому используйте

os.environ["DEBUSSY"] = "1"

, чтобы установить переменную DEBUSSY в строку 1. Чтобы позже получить доступ к этой переменной, просто используйте

print os.environ["DEBUSSY"]

. Процессы дочернего процесса автоматически наследуют среду родительского процесса - никаких специальных действий с вашей стороны не требуется.

460
ответ дан Sven Marnach 28 August 2018 в 02:42
поделиться

Как насчет os.environ["DEBUSSY"] = '1'? Переменные среды всегда являются строками.

13
ответ дан ThiefMaster 28 August 2018 в 02:42
поделиться
Другие вопросы по тегам:

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