Выполнение подпроцесса перестало работать

Возвратите false, остановит гиперссылку, сопровождаемую после того, как JavaScript работал. Это полезно для незаметного JavaScript, который ухудшается корректно - например, у Вас могло быть изображение миниатюр, которое использует JavaScript для открытия всплывающего окна полноразмерного изображения. Когда JavaScript выключен, или по изображению щелкают средней кнопкой (открытый на новой вкладке), это игнорирует onClick событие и просто открывает изображение как полноразмерное изображение обычно.

, Если бы возвращают false, не были определены, изображение и запустило бы всплывающее окно и обычно открывало бы изображение. Некоторые люди вместо того, чтобы использовать ложь возврата используют JavaScript в качестве атрибута href, но это означает, что, когда JavaScript отключен, ссылка ничего не сделает.

16
задан Robert MacLean 22 May 2013 в 11:51
поделиться

2 ответа

To execute a batch file in Windows:

from subprocess import Popen
p = Popen("batchfile.bat", cwd=r"c:\directory\containing\batchfile")
stdout, stderr = p.communicate()

If you don't want to execute the batch file, but rather execute the command in your question directly from Python, you need to experiment a bit with the first argument to Popen.

First of all, the first argument can either be a string or a sequence.

So you either write:

p = Popen(r'"C:\Program Files\Systems\Emb Work 5.4\common\bin\run" "C:\Program Files\Systems\Emb Work 5.4\arm\bin\mpr.dll" ... ...', cwd=r"...")

or

p = Popen([r"C:\Program Files\Systems\Emb Work 5.4\common\bin\run", r"C:\Program Files\Systems\Emb Work 5.4\arm\bin\mpr.dll", ...], cwd=r"...")
# ... notice how you don't need to quote the elements containing spaces

According to the documentation:

On Windows: the Popen class uses CreateProcess() to execute the child program, which operates on strings. If args is a sequence, it will be converted to a string using the list2cmdline() method. Please note that not all MS Windows applications interpret the command line the same way: list2cmdline() is designed for applications using the same rules as the MS C runtime.

Итак, если вы используете последовательность, она будет преобразована в строку. Я бы, вероятно, сначала попробовал последовательность, поскольку тогда вам не придется цитировать все элементы, содержащие пробелы ( list2cmdline () делает это за вас).

Для устранения неполадок я рекомендую вам пройти вашу последовательность в subprocess.list2cmdline () и проверьте результат.

Изменить:

Вот что бы я сделал на вашем месте:

a) Создайте простой скрипт Python ( testparams.py ) следующим образом:

import subprocess
params = [r"C:\Program Files\Systems\Emb Work 5.4\common\bin\run.exe", ...]
print subprocess.list2cmdline(params)

b) Запустите сценарий из командной строки ( python testparams.py ), скопируйте и вставьте вывод в другую командную строку, нажмите Enter и посмотрим, что произойдет.

c) Если это не сработает, отредактируйте файл python и повторяйте, пока он не сработает.

24
ответ дан 30 November 2019 в 21:45
поделиться

Во-первых, вам не нужны все эти цитаты. Так что удали их. Вам нужны только кавычки вокруг параметров, у которых есть имя файла, когда в этом имени файла есть пробел (по глупости, Windows делает это часто).

Ваши параметры - это просто список строк, некоторые из которых нуждаются в кавычках. Поскольку Windows использует нестандартный \ для разделителя путей, используйте для этих имен «сырые» строки.

params = [
    r'"C:\Program Files\Systems\Emb Work 5.4\arm\bin\mpr.dll"',
    r'"C:\Program Files\Systems\Emb Work 5.4\arm\bin\ajl.dll"',
    r'"C:\Documents and Settings\USER\Desktop\abc.out"',
    "--backend",
    "-B", 
    "--endian=little",
    "--cpu=Cortex",
    "--fpu=None",
    "-p",
    r'"C:\Program Files\unknown\abc.ddf"',
    "--drv_verify_download",
    "--semihosting",
    "--device=STM32F10xxB",
    "-d",
    "jjftk",
    "--drv_communication=USB0",
    "--speed=auto",
    "--initial_speed=32",
    "--reset_strategy=0,0"]

Используйте что-то вроде

program = r'"C:\Program Files\Systems\Emb Work 5.4\common\bin\run"'
subprocess.Popen( [program]+params )
0
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

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