Найти - Пользователи
Полная версия: Как из 32 битного питона запустить 64 битный процесс? (на винде)
Начало » Python для экспертов » Как из 32 битного питона запустить 64 битный процесс? (на винде)
1 2
Iskatel
К примеру “pnputil.exe”

Насколько я понимаю напрямую это невозможно, даже пробовал создавать батник и запускать - результат такойже как и у subprocess.call() - т.е. “файл не найден” если не поставить shell = True, и “pnputil.exe не является приложением…” если поставить.

Неужель нет способа?

Зы. гуглил, да, ничего не нагуглил
izekia
предлагаю пихнуть в планировщик)

а так на стеке вот что пишут
Iskatel
izekia
предлагаю пихнуть в планировщик)

Идея конечно, но привязанна к одной машине, в планировщике насколько помню (никогда его не юзал) данные аккаунта нужны, от которого запаускается прога…
izekia
попробуй по ссылке выше пример, правда для плюсов, но на питоне это должно быть, я сам не могу проверить у меня все питоны 64
Iskatel
izekia
попробуй по ссылке выше пример, правда для плюсов, но на питоне это должно быть, я сам не могу проверить у меня все питоны 64

Хм, ну ты сам то читал? Там не взлетело, по той ссылке… а текст в гугле я тоже умею набирать…
izekia
In both Linux and Windows , 32-bit applications can start a 64-bit process using the relevant “create a new process” system call .

не увидел где не взлетело
Iskatel
izekia
не увидел где не взлетело


Выше читай, у ТС не взлетело. (и комменты его)
А еще вторую чать фразы, цитату которой привел, переведи… “dir” например у меня спокойно запускается…

ЗЫ. Умную вещь скажу, только ты не обижайся - если нет “зеленой галочки” в ответах, значит не але, темболее что вопросу три года…
izekia
то есть вот такой вариант - это не то?
 > python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  5 2016, 11:45:57) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from run64from32 import LaunchWin32Process
>>> LaunchWin32Process('C:\\tools\\Anaconda3\\python.exe')
>>> Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Iskatel
izekia

Спасибо, любопытно, но я пока на двойке…
izekia
Iskatel
ну слушай, бро, ты такой привередливый:)
 (py27_32) user@AMD c:\work\tuts\python\stuff
> python
Python 2.7.12 |Continuum Analytics, Inc.| (default, Jun 29 2016, 11:42:13) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import run64from32
>>> with run64from32.disable_file_system_redirection():
...     run64from32.LaunchWin32Process('c:\\windows\\system32\\pnputil.exe')
...
>>> Служебная программа PnP Майкрософт
Использование:
------
pnputil.exe [-f | -i] [ -? | -a | -d | -e ] <имя INF-файла>
Примеры:
pnputil.exe -a a:\usbcam\USBCAM.INF -> Добавляет пакет, указанный USBCAM.INF
pnputil.exe -a c:\drivers\*.inf     -> Добавляет все пакеты в c:\drivers\
pnputil.exe -i -a a:\usbcam\USBCAM.INF -> Установка пакета драйверов
pnputil.exe -e                           -> Перечисляет все сторонние пакеты
pnputil.exe -d oem0.inf                  -> Удаляет пакет oem0.inf
pnputil.exe -f -d oem0.inf               -> Принуждает удалить пакет oem0.inf
pnputil.exe -?                           -> Выводит эту справку
>>>

 # run64from32.py
import win32process
import sys
import ctypes
  
  
def LaunchWin32Process(command):
    try:
        StartupInfo = win32process.STARTUPINFO()
        win32process.CreateProcess(
            None,
            command,
            None,
            None,
            0,
            win32process.NORMAL_PRIORITY_CLASS,
            None,
            None,
            StartupInfo)
    except Exception as e:
        print(sys.exc_info())
        print("Exception in LaunchWin32Process")
        pass
  
  
class disable_file_system_redirection:
    _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
    _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
  
    def __enter__(self):
        self.old_value = ctypes.c_long()
        self.success = self._disable(ctypes.byref(self.old_value))
  
    def __exit__(self, type, value, traceback):
        if self.success:
            self._revert(self.old_value)

Ссылки по теме: activestate, stack
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB