Импорт “библиотек” в powershell

Функция print является виновником - она ​​переводит символы \x00 и \x07 в значения ASCII при выполнении. В частности, это происходит только при передаче строки в функцию print, а не итерируемый или другой объект (например, ваш tuple).

Это пример:

>>> s = 'This\x00string\x00is\x00an\x00\x07Example.'

>>> s
'This\x00string\x00is\x00an\x00\x07Example.'

>>> print(s)
This string is an Example.

Если вы добавите строку s к итерируемому (tuple, set или list), s не будет быть отформатирован с помощью функции print:

>>> s_list = [s]
>>> print(s_list)  # List
['This\x00string\x00is\x00an\x00\x07Example.']

>>> print(set(s_list))  # Set
{'This\x00string\x00is\x00an\x00\x07Example.'}

>>> print(tuple(s_list))  # Tuple
('This\x00string\x00is\x00an\x00\x07Example.')

Редактировать

Поскольку байты \x00 и \x07 являются управляющими символами ASCII (\x00 - это NUL и \x07). будучи БЕЛ), вы не можете представлять их по-другому. Таким образом, единственный способ, которым вы можете вырезать эти символы из строки без печати, - это использовать метод .replace(); но учитывая, что \x00 байты обрабатываются терминалом как пробелы, вы должны использовать s.replace('\x00', ' '), чтобы получить тот же вывод, который теперь изменил истинное содержимое строки.

В противном случае при построении строки; Вы могли бы попытаться реализовать некоторую логику для проверки управляющих символов ASCII и либо не добавлять их в tempMess, ни добавлять другой символ, например пробел или подобный.

Ссылки

ASCII Wiki: https://en.wikipedia.org/wiki/ASCII

Модуль Curses: https: // docs. python.org/3.7/library/curses.ascii.html?highlight=ascii#module-curses.ascii (может быть полезно, если вы хотите реализовать какую-либо логику).

13
задан Mike Shepard 11 November 2008 в 04:09
поделиться

3 ответа

Основываясь на ответе Steven, другое улучшение могло бы быть должно позволить загружать несколько файлов сразу:

$global:scriptdirectory = 'C:\powershellscripts'
$global:loaded_scripts = @{}

function require {
  param(
    [string[]]$filenames=$(throw 'Please specify scripts to load'),
    [string]$path=$scriptdirectory
  )

  $unloadedFilenames = $filenames | where { -not $loaded_scripts[$_] }
  reload $unloadedFilenames $path
}

function reload {
  param(
    [string[]]$filenames=$(throw 'Please specify scripts to reload'),
    [string]$path=$scriptdirectory
  )

  foreach( $filename in $filenames ) {
    . (Join-Path $path $filename)
    $loaded_scripts[$filename] = Get-Date
  }
}
5
ответ дан 2 December 2019 в 01:32
поделиться

Mike, я думаю, что те сценарии являются потрясающими. Распределение Ваших функций в библиотеки очень полезно, но я думаю, что Ваши функции для загрузки сценариев очень удобны.

Одно изменение, которое я внес бы, будет состоять в том, чтобы сделать расположение файла параметром также. Вы могли установить значение по умолчанию или даже использовать глобальную переменную для этого. Вы не должны добавлять ".ps1"

$global:scriptdirectory= 'c:\powershellscripts'
$global:loaded_scripts=@{}
function require(){
      param ([string]$filename, [string]$path=$scriptdirectory)
      if (!$loaded_scripts[$filename]){
           . (Join-Path $path $filename)
           $loaded_scripts[$filename]=get-date
     }
}

function reload(){
     param ([string]$filename, [string]$path=$scriptdirectory)
     . (Join-Path $path $filename)
     $loaded_scripts[$filename]=get-date
}

Хорошие функции!

3
ответ дан 2 December 2019 в 01:32
поделиться

Я думаю, что Вы найдете, что функциональность "модулей" PowerShell v2 очень удовлетворяет. В основном заботится об этом для Вас.

1
ответ дан 2 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

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