8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

python shell 无法识别任何命令。python 命令在 anaconda shell 中运行

Sefa Dedeoglu 2月前

280 0

我在 python shell 中尝试的每个命令都不起作用。我使用 python shell 的方式错误吗?我使用的是 python 3.12.3,但版本无关紧要。我尝试过早期版本的 python,但那...

我在 python shell 中尝试的每个命令都不起作用。我使用 python shell 的方式错误吗?我使用的是 python 3.12.3,但版本无关紧要。我尝试过早期版本的 python,但也没有用。当我使用 anaconda shell 时,所有命令都被接受。

我尝试了所有能找到的命令。我复制粘贴或输入命令,但 Python 无法识别这些命令。我总是得到一个语法错误

py -m venv .venv,返回文件 \'\',第 1 行 py -m venv .venv^^^^ SyntaxError:语法无效

我希望创建一个虚拟环境

帖子版权声明 1、本帖标题:python shell 无法识别任何命令。python 命令在 anaconda shell 中运行
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Sefa Dedeoglu在本站《shell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我在变量 FI 中存储了文件名 fofo.l。我想检查文件名中是否有 \'.l\'。如果是,则执行命令 1。如果不是,则执行命令 2。我使用了 set -x 并尝试:if test ...

    在变量 fofo.l 了文件名 FI 。我想检查文件名中是否有 \'.l\'。如果是,则执行命令 1。如果不是,则执行命令 2。

    我使用 set -x 并尝试过:

    if test $FI == *.l*; then echo done; else echo fail; fi 
    

    这是输出:

    + test fofo.l == esc.txt execve.c fofo. fofo.l foo1.cpp foo2.c foo.c foo.gz foo.l fool.sl foo.save foo.sl foo.xz goo.xz goo.xz.orig mprint.c myecho2.c myecho.c nano.10558.save p1.c pm.c pm.o term.cpp zipT.gz
    bash: test: too many arguments
    + echo fail
    fail
    

    据我所知, bash 只需用任意数量的字符替换 *。有很多匹配的文件。我该如何解决这个问题?

  • 您需要 py -m venv .venv 在普通 shell(命令提示符)中运行,而不是在 python 中运行。这是因为命令 py 指的是 python 本身,而不是其中的模块或命令。

  • beth 2月前 0 只看Ta
    引用 4

    OP 被标记为 bash .

    如果您正在使用 bash 并且不需要担心可移植性,那么几乎没有理由使用 test (或 [ 的习惯 [[ ... ]] (并且而不是 expr let ,更喜欢 (( ... )) 进行算术评估。)

    请参阅 条件构造

    在 CLI 上, test 不会更改上下文因此 \'globs\' ( * ) 将使用文件名扩展进行处理,并替换为所有匹配项的列表,这会生成过多的参数 test .

    在 中有很多方法可以检查字符串和文件 bash ,有些方法会重叠。正如评论中提到的, [[ case 构造都将使用通配符,而无需进行分词或路径名扩展。

    鉴于 f=fofo.l x=abcd ,

    $: dotl(){ [[ $1 == *.l* ]] && echo match || echo nope; }
    $: dotl $f
    match
    $: dotl $x
    nope
    
    $: dotl(){ case $1 in *.l*) echo match;; *) echo nope;; esac; }
    $: dotl $f
    match
    $: dotl $x
    nope
    

    如果你更喜欢实际的正则表达式 -

    $: dotl(){ [[ $1 =~ [.]l ]] && echo match || echo nope; }
    $: dotl $f
    match
    $: dotl $x
    nope
    

    如果您需要可移植性,并且高性能不是主要关注点,那么有很多广泛可用的程序可供您进行测试 - 这 grep 是此类事情的通常选择。

    $: dotl(){ echo $1 | if grep -q '[.]l'; then echo match; else echo nope; fi; }
    $: dotl $f
    match
    $: dotl $x
    nope
    

    参数扩展 来做这样的“技巧” (尽管我一般不推荐这样做):

    $: dotl(){ local tst=${1/#*.l*/}; echo "$1 contains ${tst:+NO }.l"; }
    $: dotl fofo.l
    fofo.l contains .l
    $: dotl ooo.lala
    ooo.lala contains .l
    $: dotl abcd
    abcd contains NO .l
    

    也许这是一个 X/Y 问题 ,而您要问如何判断一个文件是否具有给定的字符串,因为您计划遍历所有文件并对每个文件执行某些操作(如果匹配)-所以您真正想要的是匹配的文件列表,而不是对每个文件进行测试。

    为此,glob 可以一次性处理所有事情:

    $: touch fofo.l ooo.lala abcd
    
    $: echo *
    abcd fofo.l ooo.lala
    
    $: echo "Files with '.l':" *.l*
    fofo.l ooo.lala
    
    $: for f in *.l*; do echo ${f^^}; done
    FOFO.L
    OOO.LALA
    

    再从另一个角度来看,也许查找表会有所帮助。

    $: . <( lst=(*.l*); shopt -s patsub_replacement; echo "declare -A lookup=(${lst[@]//*/[&]=1})" )
    $: declare -p lookup # lst inside is scoped to the subshell; use outside to keep
    declare -A lookup=([ooo.lala]="1" [fofo.l]="1" )
    
    $: echo "There are ${#lookup[@]} Files with '.l': ${!lookup[@]}"
    There are 2 Files with '.l': ooo.lala fofo.l
    
    $: for f in *; do [[ -n "${lookup[$f]}" ]] && echo "$f contains .l" || echo "$f does not contain .l"; done
    abcd does not contain .l
    fofo.l contains .l
    ooo.lala contains .l
    

    只需确保针对一些最奇怪和最不可能 实际 发生的用例来测试您选择的方法。文件名 可以 包含嵌入空格,甚至包括换行符、回车符和/或控制字符,如退格符、铃声或文件结尾标记。

  • 通配符扩展用于在实际文件系统中查找文件的名称。要测试字符串是否包含您感兴趣的字符,可以使用正则表达式匹配运算符 =~

    #!/bin/bash -e
    
    function TestIt
    {
        if [[ $1 =~ \.l ]]; then
            echo "$1 contains \".l\"."
        else
            echo "$1 does not contain \".l\"."
        fi
    }
    
    TestIt "fofo.l"
    TestIt ".l"
    TestIt "foo.landmore"
    TestIt "xl"
    TestIt "fofoxl"
    

    输出:

    fofo.l contains ".l".
    .l contains ".l".
    foo.landmore contains ".l".
    xl does not contain ".l".
    fofoxl does not contain ".l".
    
  • 通配符扩展用于在实际文件系统中查找文件的名称。不仅如此。在这种情况下不需要 =~。[[ $FI == *.l* ]] 就足够了,因为条件表达式中没有分词,也没有路径名扩展,并且 == 使用模式匹配。如果我没记错的话,它甚至可以与比 =~ 更旧的 bash 版本一起使用。

  • @RenaudPacalet: 是的,但是它只在 bash 和 [[ ... ]] 中起作用,即不能在其他 shell 中以及 [ ... ] 或测试中起作用。

  • 我有这些文件夹:projects/foobar.htmlprojects.htmlprojects_page=1.htmlprojects_page=2.html和这个请求的uri:http://localhost:8888/subdir/en/projects?page=2和这个htaccess:

    我有这些文件夹:

    projects/
     foobar.html
    projects.html
    projects_page=1.html
    projects_page=2.html
    

    并且这个请求的uri: http://localhost:8888/subdir/en/projects?page=2

    以及这个htaccess:

    DirectoryIndex disabled
    Options -MultiViews
    Options -Indexes 
    DirectorySlash Off
    
    RewriteEngine on
    
    RewriteCond %{REQUEST_URI} ^(.+)$ [NC]
    RewriteCond %{REQUEST_URI} !\.html$ [NC]
    RewriteCond %{QUERY_STRING} page=([0-9]+) [NC]
    RewriteRule ^/ %1_page=%2.html [L,R=307,QSD]
    

    我期望 projects_page=2.html 输出的是这个,但我得到的是 403 forbidden。如果我启用目录列表 ( +Indexes ),我得到的是目录列表。

    当请求 uri 表示文件夹存在时,如何在 htaccess 中定义优先重写文件?

    在 MAMP 6 上运行。

  • @anubhava 这只是一个例子。为什么这很重要?这是一个 html 文件的深层文件夹结构,只有这个 htaccess 文件。

  • 1. 重要的是了解与你的 URL 对应的目录结构;2. 如果这是在 .htaccess 中,那么

  • 设置项目 wsman:\localhost\Client\TrustedHosts -Value \'xxx.xxx.xxx.xxx\' -Force$username = \'xdfsdff\'$password = ConvertTo-SecureString \'xxxxxxxxxx\' -AsPlainText -Force$

    Set-Item wsman:\localhost\Client\TrustedHosts -Value "xxx.xxx.xxx.xxx" -Force
    
    $username = "xdfsdff"
    $password = ConvertTo-SecureString "xxxxxxxxxx" -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential($username, $password)
    
    $ipAddress = "xxxxxxxxxxxx" # Enclose IP address in quotes
    
    # Attempt to create a new PSSession
    $session = New-PSSession -ComputerName $ipAddress -Credential $credential
    
    # Check if $session is null
    if ($session -ne $null) {
        # If session is successfully created, execute script block
        Invoke-Command -Session $session -ScriptBlock {
            # Your script goes here
            Get-Date
        }
    
        # Close the session
        Remove-PSSession $session
    } else {
        Write-Host "Failed to establish a remote session."
    }
    

    我已经使用 Powershell 使用上述脚本连接 Azure VM 机器但面临以下问题

    New-PSSession : [172.174.154.189] 连接到远程服务器 172.174.154.189 失败,并显示以下错误消息:WinRM 无法完成操作。请验证指定的计算机名称是否有效、计算机是否可通过网络访问以及 WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外会限制对同一本地子网内的远程计算机的访问。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。

  • 引用 12

    事实证明,对我而言本地有效的是:

    RewriteCond %{REQUEST_URI} !\.html$ [NC]
    RewriteCond %{QUERY_STRING} page=([0-9]+) [NC]
    RewriteRule ^(.*)$ $1page=%1.html [L]
    

    重要的变化是,当您不想要重定向(有时会发生)时,不要使用 [R] 与结合 RewriteCond %{REQUEST_URI} !\.html$ [NC] 使用 [L] 或使用 [END] 代替 [L] .

  • New-PSSession : [172.174.154.189] 连接到远程服务器 172.174.154.189 失败,并显示以下错误消息:WinRM 无法完成该操作。请验证指定的计算机名称是否有效、计算机是否可通过网络访问,以及 WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外会限制对同一本地子网内的远程计算机的访问。有关详细信息,请参阅

  • WinRM 无法完成该操作。请验证指定的计算机名称是否有效、该计算机是否可通过网络访问,以及 WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。

    上述错误表明 WinRM 未启用远程服务器上的远程管理,您可以使用适当的 cmdlet 启用它。

    WinRM quickconfig
    

    注意:如果在启用远程管理时遇到任何错误,只需将网络从公共网络更改为私有网络,然后尝试再次执行相同的命令。

    enter image description here

    使用cmd打开防火墙上的 5986 端口

    netsh firewall add portopening TCP 5986 "WinRM over HTTP"
    

    使用 cmd 允许远程机器作为 客户端上的

     winrm set winrm/config/client '@{TrustedHosts="Remote_IP"}'
    

    以下是完整脚本。

        winrm quickconfig -transport:http or winrm quickconfig
        
        netsh firewall add portopening TCP 5986 "WinRM over HTTP"
        
        winrm set winrm/config/client '@{TrustedHosts="Remote_IP"}'
        
        $password = ConvertTo-SecureString "Welcome@123$" -AsPlainText -Force
        $credential = New-Object System.Management.Automation.PSCredential("Venkat", $password)
        
        $ipAddress = "Remote-Server_IP"
        
        # Attempt to create a new PSSession
        $session = New-PSSession -ComputerName $ipAddress -Credential $credential
        
        
        # Check if $session is null
        if ($session -ne $null) {
            # If session is successfully created, execute script block
            Invoke-Command -Session $session -ScriptBlock {
                # Your script goes here
                Hostname
            }
        
            # Close the session
            Remove-PSSession $session
        } else {
            Write-Host "Failed to establish a remote session."
        }
    

    输出:

    enter image description here

    enter image description here

  • 引用 15

    如果此变量不存在值,我可以使用以下代码来创建一个新的 OrdID:如果 ($OrdID==\'\'){$con = mysql_connect(\'localhost\',\'xxx\',\'xxx\');mysql_select_db...

    如果此变量不存在值,我可以使用以下代码来创建新的 OrdID:

    If ($OrdID=="")
    {
    $con = mysql_connect("localhost","xxx","xxx");
    mysql_select_db("xxx_Order", $con);
    $query=mysql_query("Select Max(OrdID) FROM `Order`");
    while($row=mysql_fetch_array($query))
    {
    $OrdID= $row[0] + 1;
    }
    $sql = "INSERT INTO `xxx_Order`.`Order` (`OrdID`) VALUES ($OrdID);"; 
    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }
    mysql_close($con);
    }
    

    当然,在上述代码之前我已经(并且我尝试将下面的代码放在我的 php 文件的第一行,在头部部分和主体部分,并且尝试使用 $_GET 而不是 $_REQUEST):

    $OrdID=$_REQUEST["OrdID"];
    

    但是,当我在浏览器中复制/粘贴以下链接时,变量/值不会被拾取,并且上面的代码会创建一个新的 OrdID:example.com/test.htm?OrdID=304819

    我遗漏了什么?谢谢

    尝试使用 $_GET 代替 $_REQUEST。将代码放在不同的部分

    更新:实际上我想我知道问题所在...这是我的 htaccess 重定向:

    RewriteRule link--(.*)\--(.*)\--(.*)\--(.*)\--(.*)\.htm$ example.php?Vendor=$1&Maincategory=$2&Source=$3&Pos=$4&Search=$5
    

    我之所以认为它是上述重定向,是因为无论我在 example.com/test.htm 末尾添加什么,它总是会重定向到:

    example.php?Vendor=$1&Maincategory=$2&Source=$3&Pos=$4&Search=$5
    
  • 我在使用 PHP 将数据写入 Ubuntu WSL 上的 .htaccess 文件时遇到问题。情况如下:如果我替换以下字符串的空行:#BEGIN BLOCK1#END BLOCK1 #BEGIN B...

    我在使用 PHP 将数据写入 Ubuntu WSL 上的 .htaccess 文件时遇到问题。

    情况如下:

    如果我替换以下字符串的空行:

    
    #BEGIN BLOCK1
    #END BLOCK1
    
    
    
    #BEGIN BLOCK2
    #END BLOCK2
    

    使用以下 PHP 脚本:

    $text = preg_replace("/([\n]*|[\n]+)[\s\t]*[\n]+/", "\n", $content);

    并将其写入 Ubuntu Apache WSL 上的 .htaccess 文件 - 它看起来与之前一样是带有空行的字符串。

    但是如果我使用相同的脚本将其写入另一个文件 - 空行就会按预期被删除。

    我检查了 .htaccess 的权限 - 它们是 777。并且我还检查了 \'\r\n\' 和 \'\n\' 行 - 但没有任何效果...

    我希望有人可以解释为什么替换后仍然有空行。

  • 我想在我的输入字段中显示我选择的依赖下拉值。我想使用 if 语句检查依赖下拉值是否被选中。如果被选中,则显示它...

    我想在我的输入字段中显示我选择的从属下拉值。

    我想使用 if 语句检查依赖下拉值是否被选中。如果被选中,则将其显示在输入字段上。控制器代码如下:-public function editsub_category(Request $request)

  • New-PSSession : [172.174.154.189] 连接到远程服务器 172.174.154.189 失败,并显示以下错误消息:WinRM 无法完成该操作。请验证指定的计算机名称是否有效、计算机是否可通过网络访问,以及 WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外会限制对同一本地子网内的远程计算机的访问。有关详细信息,请参阅

  • 请提供更多上下文和完整的控制器代码,正如@Subha 所说,您需要调用后端部分而无需重新加载整个页面,这可以通过 AJAX 完成,但现在是 2024,您可以使用很多工具来完成此操作:livewire、vue、jquery……

  • 请发布所有相关代码/您的完整尝试、示例数据、该数据的预期结果以及当前发生的情况(我们需要详细信息,包括完整的错误消息(如果有))。另请阅读

返回
作者最近主题: