如何在timeout = aiohttp.ClientTimeout(total=60)
connector = aiohttp.TCPConnector(limit=40)
dummy_jar = aiohttp.DummyCookieJar()
async with aiohttp.ClientSession(connector=connector, timeout=timeout, cookie_jar=dummy_jar) as session:
for site in sites:
task = asyncio.ensure_future(make_request(session, site, connection_pool))
tasks.append(task)
await asyncio.wait(tasks)
connection_pool.close()
中将myChar
转换为类型New-Variable -Name myChar -Value "=" -Option ReadOnly
,或者(更一般而言)如何指定使用[char]
创建的变量的类型?
谢谢
编辑(贷记到@veefu):
New-Variable
编辑(贷记到@postanote):
[char]$sampleVariable="A"
$sampleAttributes=(Get-Variable -Name sampleVariable).Attributes[0]
New-Variable -Name myVariable
(Get-Variable -Name myVariable).Attributes.Add($sampleAttributes)
$myVariable="ab" # GENERATES CONVERSION ERROR (WHICH HELPS A LOT)
$myVariable="a" # DOES NOT GENERATE CONVERSION ERROR (EVERYTHING'S FINE)
答案 0 :(得分:3)
现在在PowerShell中几乎不可能做到这一点,因此我打开了一个问题You should be able to set the type conversion attribute on a variable with New-Variable来解决此问题。
答案 1 :(得分:2)
按照其规范,没有一种单独使用cmdlet的本地方法:
[-Name] <String>
[[-Value] <Object>]
[-Description <String>]
[-Option <ScopedItemOptions>]
[-Visibility <SessionStateEntryVisibility>]
[-Force]
[-PassThru]
[-Scope <String>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
稍作考虑后,可以在创建或内联之后应用数据类型,这种方式... (相对于您的用例而言,这可能是您的一种方式,但是再次……)
[char](New-Variable -Name myChar -Value "=")
$myChar
=
$myChar.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
Remove-Variable -Name myChar
[int](New-Variable -Name myChar -Value 1)
0
$myChar
1
$myChar.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
Remove-Variable -Name myChar
[decimal](New-Variable -Name myChar -Value 10.00)
0
$myChar
10.00
$myChar.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Double System.ValueType
Remove-Variable -Name myChar
变量类型
通常,当您创建变量时,将根据您使用的值隐式设置类型。有时,尽管您可能想显式设置变量类型。
如果您不给变量指定类型,则可以执行以下操作:
PS> $x = 35
PS> $x
35
PS> $x = 'now a string'
PS> $x
now a string
如果为变量指定显式类型
PS> [int]$x = 35
PS> $x
35
PS> $x = 'now a string'
Cannot convert value "now a string" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $x = 'now a string'
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
该变量需要一个整数或可以转换为整数的内容
PS> $x = '123'
PS> $x
123
使用New-Variable时无法提供类型,因此,如果需要只读或常量变量,则按上图所示创建它,然后使用Set-Variable将其设置为只读或常量
。https://blogs.msmvps.com/richardsiddaway/2018/08/18/variable-type
所以,这仍然回到我之前的声明中...
创建后可以应用数据类型...
在我之前的帖子中没有想到Set-Variable。
答案 2 :(得分:2)
带有和不带有类型说明符[int32]
的变量之间的区别在于变量属性:
[int32] $var1 = 32
$var2 = 'a'
Get-Variable -Name 'var1' | fl *
Get-Variable -Name 'var2' | fl *
产量:
Name : var1
Description :
Value : 32
Visibility : Public
Module :
ModuleName :
Options : None
Attributes : {System.Management.Automation.ArgumentTypeConverterAttribute}
Name : var2
Description :
Value : a
Visibility : Public
Module :
ModuleName :
Options : None
Attributes : {}
New-Variable
不支持设置这些属性,因此无法使用[int32] $myVarname
来等效于New-Variable
可以使用.net [psvariable]::new()
构造函数来创建具有这些属性的变量。我无法弄清楚如何从头开始构造属性以使其等同于[int32]
,但是在构造过程中能够成功地从另一个变量复制属性:
[int32] $int32ConstrainedVar1 = 32
$var1Attributes = (Get-Variable -Name 'int32ConstrainedVar1').Attributes
$newConstrainedVar = [psvariable]::new('int32ConstrainedVar2', 33, 'None', $var1Attributes)
此后,按预期尝试分配无法转换为[int32]
的内容失败:
$newConstrainedVar.Value = 'asdf'
产量:
Exception setting "Value": "Cannot convert value "asdf" to type "System.Int32". Error: "Input string was not in a correct format.""
At line:1 char:1
+ $newConstrainedVar.Value = 'asdf'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
很抱歉,提供的详细信息;这是我刚接触到的Powershell内部构件级别。
我对您的用例感兴趣;我能想象出您想在如此低的水平上使用powershell的原因是,如果您正在编写一个将另一种语言转换为powershell的运行时。