【问题标题】:R system call returning stdin without escape charactersR系统调用返回没有转义字符的标准输入
【发布时间】:2013-06-06 19:47:26
【问题描述】:

编辑:这个问题没有经过深思熟虑。我的问题实际上是简单地尝试通过闪亮显示文本 - 不存储它。有时候你只是想不清楚。

我有一个 python 脚本,可以将一些结果打印到标准输入,我想将这些结果读入 R 中的字符向量。这通常使用 system(...,intern=TRUE) 效果很好,但是在这种情况下,当转义字符是添加(脚本返回 HTML,添加转义字符会导致 HTML 格式错误)。我可以通过将 python 的输出保存到一个临时文件并将该文件读入 R 来解决这个问题,但如果有一个我想不到的简单修复方法,我宁愿避免这种情况。这是我的意思的一个例子:

> #f.py is a text file containing
>
> # #!/usr/bin/python
> # 
> # html = """
> #     <HTML>
> #             <p>some content</p>
> #             <p> some more content </p>
> #         </HTML>"""
> # 
> # print html
> 
> #the /t, among other escapes, break the html
> v1 <- paste(system("./f.py",intern=TRUE),collapse="")
> v1
[1] "\t\t<HTML>\t\t\t<p>some content</p>\t\t  \t<p> some more content </p>\t\t</HTML>"
> 
> #this is what I want... but it needs to be saved into an object
> system("./f.py")

        <HTML>
            <p>some content</p>
            <p> some more content </p>
        </HTML>
> #or equivalently
> cat(v1)
        <HTML>          <p>some content</p>         <p> some more content </p>      </HTML>
> 
> #I thought capture.output() would work, but the string still has the escaped characters
> v2 <- capture.output(cat(v1))
> v2
[1] "\t\t<HTML>\t\t\t<p>some content</p>\t\t  \t<p> some more content </p>\t\t</HTML>"

【问题讨论】:

  • paste() 是从哪里导入的(或者是你自己的函数?)
  • paste 只是基数 R (base::paste) - 它只是将每一行转换为单个字符向量(没有它,您将得到一个长度为 4 的向量,由换行符分割)
  • 我读这个是关于在 Python 中使用 R 的问题,而不是相反。我的坏:)
  • 啊,有道理。如果您认为阅读起来令人困惑,请告诉我,我会尽力消除歧义。
  • 模棱两可在我这边。有一个名为 system() 的 Python 命令(from os import system 会让你像这样调用它,尽管它通常像 os.system() 一样被调用)它做同样的事情(尽管有不同的参数)和一个名为 paste 的模块虽然有没有像R 的粘贴这样的功能。你的第一句话很清楚。我不知道R,但它是否可以将制表符表示为\t,而不是实际上用`\`和`t`填充字符串?

标签: python r system


【解决方案1】:

您的代码运行良好,R 只是将您的转义字符打印为转义字符。如果你这样做了

cat(paste(system("./f.py", intern=TRUE), collapse=""))

你应该会看到你想要的输出。

【讨论】:

  • 对不起,我说得太早了。这实际上不适用于我的目的。我需要存储一个文字字符串,当cat() 应用于结果时读取打印的内容。
  • 您的意思不是“\t”,而是要查看“”(8 个空格),但不使用cat?这很奇怪。能否提供更多背景资料?
  • 我编辑了原始帖子,但我基本上只是度过了愚蠢的一天。我的问题显然不在于存储数据,它通过闪亮的界面将其泵送以正确显示。我会接受你的回答,因为我的问题没有真正的意义。
猜你喜欢
  • 1970-01-01
  • 2015-11-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 2023-03-25
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多