Программно отключите/разрешите сетевой интерфейс

Я думаю, что здесь лучше использовать пропущенные значения вместо .. по to_numeric с errors='coerce', поэтому делим работу очень хорошо:

df2 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'],
                'Unit': [ 'USD', 'EUR', 'EUR'],
                  'Location': [ 'Hawai', 'Torino', 'Paris'],
                  '2000': [2, '..',6],
                    '2002': [8,10,12]
                   })
df2.set_index(['Country','Unit','Location'],inplace=True)

df2.columns=df2.columns.astype(int)
s= df.Value.unstack(fill_value=1)
df2 = df2.apply(lambda x: pd.to_numeric(x, errors='coerce')).mul(s)
print (df2)
                            2000       2002
Country Unit Location                      
US      USD  Hawai      3.528105   3.201258
IT      EUR  Torino          NaN  22.408932
FR      EUR  Paris     11.205348 -11.727335

Если только не числовые значения .. другое решение - использовать replace:

df2 = df2.replace('..', np.nan).mul(s)

18
задан Community 23 May 2017 в 12:17
поделиться

4 ответа

После тестирования на большем количестве платформ и подходов я в основном отказался от этой функциональности (по крайней мере, для моих целей). Проблема для меня в том, что я хочу иметь что-то, что работает в 90% + ситуаций, а на самом деле все, что я мог придумать, приближается к 70%. Ирония заключается в том, что на самом деле это так же нестабильно и при использовании обычного метода Windows. Для тех, кто все еще хочет пойти по этому опасному пути, вот что я обнаружил:

Из прямых методов API, описанных выше, наиболее стабильно работал SetupAPI (SetupDiSetClassInstallParams) - самая большая проблема, с которой я столкнулся. это то, что иногда он попадал в состояние, когда требовалась перезагрузка, и никакие изменения не работали, пока это не произошло. Единственное, о чем следует помнить при использовании, это то, что существует два профиля для устройств, поэтому в некоторых случаях вам нужно переключать их оба. DDK содержит исходный код инструмента devcon, который показывает, как именно все делать. В конечном итоге это выглядело так, как будто это был самый близкий к щелчку правой кнопкой мыши, но все же проявлял какое-то странное поведение, которого не было у сетевых подключений. Этот подход, похоже, работал примерно в 70% случаев (как в тестах, так и в тестовых системах).

Из общего подхода к взлому лучшее, что я обнаружил, - это не использовать технику, которую сделал ToggleNIC, а вместо этого использовать материал IShellFolder - это позволяет вам использовать GetCommandString, который не зависит от языка. Проблема в том, что в XP GetCommandString ничего не возвращает (о радость), но оказалось, что идентификаторы меню для 'enable' и ' disable 'были согласованы (16 и 17 соответственно), поэтому, если мне не удавалось выполнить GetCommandString, я просто возвращался к идентификаторам меню. Для переключения просто вызовите InvokeCommand либо со строкой, если она вернула, либо с идентификатором меню, если нет. Проблема заключалась в том, что, как и в случае с обычным способом Windows, иногда он не работает и не дает никаких указаний на то, что происходит или почему он не работает. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».

Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!

с. Для переключения просто вызовите InvokeCommand либо со строкой, если она вернула, либо с идентификатором меню, если нет. Проблема заключалась в том, что, как и в случае с обычным способом Windows, иногда он не работает и не дает никаких указаний на то, что происходит или почему он не работает. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».

Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!

с. Для переключения просто вызовите InvokeCommand либо со строкой, если она вернула, либо с идентификатором меню, если нет. Проблема заключалась в том, что, как и в случае с обычным способом Windows, иногда он не работает и не дает никаких указаний на то, что происходит или почему он не работает. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».

Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!

при этом он не дает вам никаких указаний на то, что происходит или почему это не удалось. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».

Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!

при этом он не дает вам никаких указаний на то, что происходит или почему это не удалось. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».

Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!

6
ответ дан 30 November 2019 в 09:32
поделиться

Попробуйте " Сетевые интерфейсы оболочки " C ++ - код здесь . Это должно работать под XP и выше.

1
ответ дан 30 November 2019 в 09:32
поделиться

ToggleNic использует Shell32 через COM. В c используется стандартные библиотеки "SHLOBJ.H", "SHELLAPI.H" и класс IShellDispatch.

0
ответ дан 30 November 2019 в 09:32
поделиться

после долгих поисков я начал копаться в DEVCON. Поняв, что эти методы должны быть обнаружены, я немного поискал и нашел следующее: http://www.codeproject.com/KB/cs/HardwareHelper.aspx

Это помогло мне решить мою проблему включения и отключения адаптера TAP по крайней мере из OpenVPN.

1
ответ дан 30 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

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