簡體   English   中英

從bash腳本中生成並執行R,Python等腳本

[英]Generate and execute R, Python, etc.., script from within bash script

我一直試圖找到一個解決方案一段時間,但還沒有找到任何令人滿意的。 我編寫了很多bash腳本,但有時我想使用R或Python作為腳本的一部分。 現在,我最終不得不寫兩個腳本; 原始bash腳本執行任務的前半部分,而R或Python腳本執行后半部分任務。 我在bash腳本中調用R / Python腳本。

我對這個解決方案不滿意,因為它將我的程序分成兩個文件,這增加了事情不同步的機會,更多的文件跟蹤等等。有沒有辦法寫一個包含整個文件的文本塊我的R / Python腳本,然后將bash吐出到一個文件中並將參數傳遞給它並執行它? 有更簡單的解決方案嗎? 這比將簡單的單行傳遞給R / Python更復雜,因為它通常涉及通過幾個步驟創建和操作對象。

可能有很多解決方案,但這個有效:

#!/bin/bash
## do stuff
R --slave <<EOF
  ## R code
  set.seed(101)
  rnorm($1)
EOF

如果你想靈活地將額外的bash參數傳遞給R,我建議:

#!/bin/bash
## do stuff
R --slave --args $@ <<EOF
  ## R code
  set.seed(101)
  args <- as.numeric(commandArgs(trailingOnly=TRUE))
  do.call(rnorm,as.list(args))
EOF
  • 這允許靈活數量的參數,但假設它們都是數字的
  • 它還假設所有參數都將從bash腳本傳遞到R子腳本

顯然你可以放松這些,例如在位置參考參數

這是python的一個例子,類似於Ben Bolker的回答

#!/bin/bash
python << EOF
print 'Hello $1'
EOF

輸出:

> sh test.sh "world"

Hello world

-----------------------------------------------

你也可以將變量從bash傳遞給python:

for ((i=1;i<=$1;i++)) do
python << EOF
print 'Hello world $i times'
EOF
done

輸出:

> sh test.sh 5

Hello world 1 times
Hello world 2 times
Hello world 3 times
Hello world 4 times
Hello world 5 times

為正常工作導入pandas,numpy,matplotlib和其他工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM