Новая строка зависит от вашей ОС:
DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13
Подробнее здесь: https://ccrma.stanford.edu/~craig/utility/flip/
Если сомневаетесь, воспользуйтесь любой бесплатной программой просмотра / редактирования в шестнадцатеричном формате, чтобы увидеть, как файл кодирует новую строку.
Для себя я использую следующее руководство, чтобы помочь мне запомнить: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n Электронная подача
Когда shell = Если используется значение false
, строка будет рассматриваться как отдельная команда, поэтому вам нужно передать команду / arugments в виде списка .. Примерно так:
from subprocess import Popen, PIPE
cmd = [
r"C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv", # in raw r"blah" string, you don't need to escape backslashes
"solution.sln",
"/build",
"Debug|Win32"
]
p = Popen(cmd, stdout=PIPE, stderr=PIPE)
out = p.stdout.read() # reads full output into string, including line breaks
print out
попробуйте использовать двойные кавычки, например: 'devenv A.sln / build "Debug | Win32"'
Похоже, оболочка Windows принимает этот |
как канал (несмотря на кавычки и экранирование). Вы пробовали вместо этого shell = False
?
Существует разница между devenv.exe
и devenv.com
, оба из которых являются исполняемыми и находятся в одном каталоге (вздох). Командные строки, использованные в вопросе, и некоторые ответы не говорят, что они хотят, поэтому я не уверен, какие из них будут использованы.
Если вы хотите позвонить из командной строки, вам необходимо убедиться, что вы используете devenv.com
, иначе вы, скорее всего, получите всплывающий графический интерфейс. Я думаю, что это может быть причиной некоторых (но не всех) путаницы.