jjzjj

r - system() 返回错误但 shell() 有效

coder 2024-06-17 原文

我最近完成了 (Windows) 系统更新,现在我无法再使用 R 运行系统命令。我尝试重新安装 R 和所有用过的包,但这并不能解决我的问题。重启也没有解决问题。

我刚刚发现,虽然 system() 和 system2() 命令不再起作用,但 shell() 命令却起作用。

> system('ECHO "test"')
Warning message:
running command 'ECHO "test"' had status 127
> system2('ECHO "test"')
Warning message:
running command 'ECHO \"test\"' had status 127
> shell('ECHO "test"')
"test"

文档描述了 shell() 应该是 system() 的简单用户友好包装器。因此,我不明白为什么 shell() 有效,但系统却没有。

在另一台 system() 函数仍然有效的计算机上,我检查了差异。 Windows 版本、R 版本和包版本相同(至少根据干净 session 中的 sessionInfo())。与我可以玩的 system() 相比,Shell() 指定了一些额外的参数:

  • shell 指定要使用的 shell。 “详细信息”部分告诉我这将检查两个环境变量:R_SHELL 和 COMSPEC。 R_SHELL 未在两个系统(全局和本地)上定义。 COMSPEC 已定义并在两个系统上都引用 cmd.exe(在同一文件夹中)。我已经通过此可执行文件检查并运行了纯命令。
  • flag 不知道这是做什么的,但它与 system() 命令不同。据我了解,更改它的唯一原因是使用不同的 shell/OS(例如 Linux 上的 Bash)。
  • intern 将 shell() 和 system() 都设置为 FALSE。
  • wait 将 shell() 和 system() 都设置为 TRUE。
  • translate 设置为 TRUE,但系统调用不包含“/”或“\”。正如预期的那样,使用此 bool 值不会改变结果。
  • mustWork 与错误情况下的输出相关。将返回错误或警告。更改此 bool 值不会更改行为。

因此,我只能得出结论,shell() 在 system() 之上做了一些事情,以某种方式改变了它的行为。此行为未在文档中指定,也未通过任何参数访问。

为了找到此错误的根源,我可以在哪里寻找两者之间的其他差异?

最佳答案

首先我尝试了是否可以重现这个(在 Win10 上):

system('ECHO "test"')
#Warning message:
#running command 'ECHO "test"' had status 127

shell('ECHO "test"')
#"test"

然后我查看了 shell 的源代码,发现它在将命令传递给 system 之前更改了命令。在我的系统上:

system('C:\\WINDOWS\\system32\\cmd.exe /c ECHO "test"')
#"test"

另见 Sys.getenv("COMSPEC") 如果 Sys.getenv("R_SHELL") 为空,它会提供 shell。请注意,文档指出 POSIX 标准要求在 shell 下运行命令。 help("system") 解释了在类 Unix 操作系统上 system 启动一个 shell 并推荐 shell(在 Windows 上)。

关于r - system() 返回错误但 shell() 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41807981/

有关r - system() 返回错误但 shell() 有效的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  3. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  4. ruby-on-rails - 如何在 ruby​​ 交互式 shell 中有多行? - 2

    这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式ruby​​shell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f

  5. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  6. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  7. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  8. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  9. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  10. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

随机推荐