Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2016 22:25:47

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

К примеру “pnputil.exe”

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

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

Зы. гуглил, да, ничего не нагуглил

Отредактировано Iskatel (Ноя. 8, 2016 22:26:33)

Офлайн

#2 Ноя. 8, 2016 22:42:54

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

предлагаю пихнуть в планировщик)

а так на стеке вот что пишут



Отредактировано izekia (Ноя. 8, 2016 22:47:27)

Офлайн

#3 Ноя. 8, 2016 22:47:04

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

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

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

Офлайн

#4 Ноя. 8, 2016 22:48:57

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

попробуй по ссылке выше пример, правда для плюсов, но на питоне это должно быть, я сам не могу проверить у меня все питоны 64



Офлайн

#5 Ноя. 8, 2016 22:54:34

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

izekia
попробуй по ссылке выше пример, правда для плюсов, но на питоне это должно быть, я сам не могу проверить у меня все питоны 64

Хм, ну ты сам то читал? Там не взлетело, по той ссылке… а текст в гугле я тоже умею набирать…

Отредактировано Iskatel (Ноя. 8, 2016 22:55:01)

Офлайн

#6 Ноя. 8, 2016 23:08:23

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

In both Linux and Windows , 32-bit applications can start a 64-bit process using the relevant “create a new process” system call .

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



Офлайн

#7 Ноя. 8, 2016 23:16:44

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

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


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

ЗЫ. Умную вещь скажу, только ты не обижайся - если нет “зеленой галочки” в ответах, значит не але, темболее что вопросу три года…

Офлайн

#8 Ноя. 8, 2016 23:32:49

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

то есть вот такой вариант - это не то?

 > 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.
>>>



Отредактировано izekia (Ноя. 8, 2016 23:36:54)

Офлайн

#9 Ноя. 9, 2016 00:09:32

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

izekia

Спасибо, любопытно, но я пока на двойке…

Офлайн

#10 Ноя. 9, 2016 00:28:14

izekia
От:
Зарегистрирован: 2008-07-19
Сообщения: 317
Репутация: +  12  -
Профиль   Отправить e-mail  

Как из 32 битного питона запустить 64 битный процесс? (на винде)

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version