Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 23

0
votes
answers
60 views
+10

PHP提取從Openload.co直接視頻路徑嵌入式URL

0

我正在尋找解決這個問題的很長一段時間。大約3個星期,我沒有得到任何解決方案。PHP提取從Openload.co直接視頻路徑嵌入式URL

這是要提取

https://openload.co/embed/nLFGFH8VuZs/

的openload嵌入的URL直接鏈接: https://1fiafzt.oloadcdn.net/dl/l/5qcL-TC0FIr7GgUX/nLFGFH8VuZs/VELMA2017RIPN15.mkv.mp4

可有人可以建議的解決方案將其解壓。我使用google chrome Inspect元素獲得了直接網址。 我可以看到一旦我點擊播放。如何我可以使用PHP或任何其他

感謝

+0

嘗試phantomjs或YouTube-DL –

沙发
0
0

嘗試 openload API(鏈接 - https://openload.co/api

首先,您需要使用此URL

https://api.openload.co/1/file/dlticket?file= {文件生成的驗證票} & login = {login} & key = {key}

where,file = nLFGFH8VuZs(in you R情形)

您將在JSON格式得到票

其次,使用下面的URL生成下載鏈接 -

https://api.openload.co/1/file/dl?file= {文件} &票= {票}

您將得到下載鏈接在JSON文件

(EG)網址: 「https://1fiafzt.oloadcdn.net/dl/l/5qcL-TC0FIr7GgUX/nLFGFH8VuZs/VELMA2017RIPN15.mkv.mp4

0
votes
answers
58 views
+10

顯影劑樣品。搬運工組成了超時

0

我嘗試Chaincode的開發樣品,並運行泊塢窗組成的向上運行時,1號航站樓 - 啓動網絡,顯影劑樣品。搬運工組成了超時

失敗

訂貨|發佈時間:2017年11月11日13:48:52.252 UTC [orderer/common/deliver] deliverBlocks - > DEBU 32c [channel:myc]收到seekInfo(0xc420a12e60)start:> stop:> 172.18.0.3:33048 錯誤: cli.errors.log_timeout_error:HTTP請求花了很長時間才能完成。用--verbose重試以獲取調試信息。 如果由於網絡條件較慢而定期遇到此問題,請考慮將COMPOSE_HTTP_TIMEOUT設置爲更高的值(當前值:60)。

這是運行在Ubuntu 16.04上。我沒有看到任何會阻止連接的東西,撰寫文件看起來是正確的。一切只是在11月10日下載。

沙发
0
0

這實際上並不是真正運行示例的主要錯誤 - 這是Docker Compose自身偶爾拋出的錯誤。由於錯誤的說法,你可以簡單地之前運行示例(或多個)設置變量:

export COMPOSE_HTTP_TIMEOUT=600 
+0

感謝..現在嘗試.. – Sam

+0

從chaincode,(步驟2)得到錯誤2017年11月11日15:42:03.720 UTC [shim] func1 - > ERRO 003從服務器收到錯誤,結束chaincode流:rpc錯誤:code =未實現desc =未知服務protos.ChaincodeSupport – Sam

+0

我重新安裝了Docker容器(現在爲1.0.3)和一切正常。 – Sam

0
votes
answers
49 views
+10

如何知道已加入渠道的所有同行

0

來自超級結構結構peer channel join -b helloch.block命令哪個對等連接通道不生成將發送給所有對等點的塊。如何知道已加入渠道的所有同行

那麼,當其他組織同伴加入渠道時,我們不知道。

我認爲它應該生成一個塊來通知任何其他同伴。還有其他想法嗎?

沙发
0
0

沒有辦法列出當前版本的Hyperledger Fabric中加入頻道的所有對等點,但是有一項工作正在進行FAB-5451以實現服務發現,因此對等方將能夠向客戶端展示這些類型的信息。

0
votes
answers
46 views
+10

使用Cygwin中啓動的perl腳本運行帶有2個參數的Java文件

0

我試圖編寫一個Perl腳本來啓動我的Java程序。使用Cygwin中啓動的perl腳本運行帶有2個參數的Java文件

我試圖使用Cygwin在Windows 10

來執行它的Java程序的主要方法需要兩個參數。

主要方法是這樣的

public static void main(String[] args) throws InterruptedException, IOException 
{ 
    String ipAddress = args[0]; 
    int port = Integer.parseInt(args[1]); 
    ACPCGame acpc1 = new ACPCGame(); 
    acpc1.play(ipAddress, port); 
} 

然後我有我的Perl腳本稱爲canarybot.pl

my @args = ("java", "-jar", "canarybot.jar", "localhost", "55001"); 
system(@args); 

localhost55001應該是兩個參數由Java main方法的預期。

我然後打開包含Perl腳本和jar文件的目錄Cygwin的bash提示符並嘗試這樣

./canarybot.pl 

這將導致錯誤

./canarybot執行它。 pl:line 1:syntax error near unexpected token'('
./canarybot.pl:line 1:my @args =(「java」,「-jar」,「canarybot.jar」,「localhost',」55001 「);

+1

我不是很熟悉cygwin(更多),但是:你的腳本中是否有shebang行('#!/ usr/bin/perl')?並且:當你發出'perl。/ canarybot.pl'時它是否工作? – PerlDuck

+0

我的整個腳本貼在上面。我不知道shebang線是什麼,但現在我會google。 –

+2

shebang行告訴系統使用哪個程序來解釋腳本的其餘部分。在你的情況下,你想'perl'來處理腳本(比如'bash')。嘗試將'#!/ usr/bin/perl'或只是'#!perl'添加到腳本的第一行。 (你顯示的兩條線看起來不錯,順便說一句) – PerlDuck

沙发
0
3

錯誤syntax error near unexpected token是一個shell錯誤。你問Cygwin的shell執行一個Perl程序,當然它使廢話在這方面

您可以使用

perl canarybot.pl 

,或者你可以添加一個 shebang line

#!perl 

到程序的開始,這將導致Cygwin外殼在PATH上查找perl並使用它執行後續代碼,而不是嘗試自行解釋它

但我沒有看到任何理由在這裏使用Cygwin。從Windows cmd提示你可以使用命令

canarybot.pl 

Windows將開始在該文件的當前工作目錄搜索,而將使用註冊表來確定如何處理.pl文件類型。沒有必要在所有

+0

多年前我曾經使用過Cygwin,因爲它有一個帶有tab-tab-tab-completion和其他花哨事物的適當shell。我不關心Windows如何啓動我的腳本,因爲我從Cygwin shell啓動它們。也許OP是用同一個模子鑄造的。 (我不得不查看那個短語;-)) – PerlDuck

+0

如果我從cmd窗口運行canarybot.pl,它將在記事本中打開它:) –

+1

@PerlDuck:最新版本的Windows 10提供了一個bash shell。沒有任何理由使用Cygwin,如果你正在爲Windows開發,那麼你不應該首先假設一個bash shell。 Tribals將堅持認爲你必須假裝你的Windows平臺確實是一個Linux系統,但他們被迷惑了。 – Borodin

板凳
0
0

這是一個shebang行是通過編輯Perl腳本一起使用認領本着對java.exe的文件的具體路徑如下解析:

#!/usr/bin/perl 
my @args = ("/cygdrive/c/Program Files/Java/jdk1.8.0_152/bin/java.exe", "-jar", "canarybot.jar", "localhost", "55001"); 
my $ret = system(@args); 
0
votes
answers
32 views
+10

如何在Perl正則表達式中使用操作?

0

例如,讓我們說我有這樣的事情:如何在Perl正則表達式中使用操作?

$_ = 23; 
$a = 2; 
print /$a $a+1/x; 

應打印1.基本上,是它可以使用正則表達式的字符串中的功能呢?

+0

從你的例子中很難知道爲什麼你不會在正則表達式之外進行操作 – beasy

沙发
0
1

正則表達式中的變量插值與字符串中的變量插值幾乎相同。給定??,字符串??將是"2 2+1"。該變量已展開,但字符串中的代碼未執行。

圍繞這個的一個訣竅是在字符串中使用解引用引用。這使我們可以包含任意表達式,但語法有點麻煩。通常,我們用我們想包含的值創建一個數組引用,然後立即解引用它:@{[$x + 1]}。這與Ruby的#{...}插值或Bash $(...)命令替換類似。

所以正則表達式/$x @{[$x + 1]}/x會工作。

但在大多數情況下,這將更加清晰進行正則表達式之外的所有計算:

my $x = 2; 
my $y = $x + 1; 
/$x $y/x; 

Perl的正則表達式的語法也有語法,可以動態地生成正則表達式的部分。使用上面的變量插值,插值變量內容,然後編譯正則表達式。但高級正則表達式可能會在模式匹配期間更改變量的值。這些延遲的正則表達式可以用(??{ ... })語法編寫。這裏:/$x (??{ $x + 1 })/x。但是,這是一個非常先進且容易出錯的正則表達式特性。這也會比普通的正則表達式慢。

板凳
0
1

an extended pattern,它提供了在匹配運算符m/或替換運算符s///的匹配部分中的代碼執行。

它的版本替換代碼的回報,接着把它當作一種模式是

/(??{ code })/ 

所以你的情況

$_ = 23; 
my $x = 2; 
my ($m) = /(2(??{ $x+1 }))/; 
say $m; 

RE_EVAL: { 
    use re 'eval'; 
    my ($m) = /($x(??{ $x+1 }))/; 
    say $m; 
} 

比賽和捕獲23

這裏use re 'eval'明確允許這一點,通常由於安全原因不允許。

這是一個非常複雜的功能,它帶有複雜的警告。除了在上述鏈接中的輸入外,還請按照該文本中的鏈接閱讀有關Embedded Code Execution frequency

請不要使用這個複雜的工具,以方便或代替正確書寫的代碼。

0
votes
answers
54 views
+10

如何將文本放在HTML中的同一行上?

0

在學校我的地理課,我們在不同的國家和其中的一個選項進行演示是一個網站。我知道基本的html,但不是很多關於它的設計和顯示方面。現在,我在許多網站上看到了在同一行上獲取文本的許多麻煩。我的代碼目前看起來像這樣:如何將文本放在HTML中的同一行上?

<!DOCTYPE html> 
    <html> 
     <head> 
      <title>Swedish Political Geography</title> 
     </head> 
     <body> 
     <font face="verdana" size=「10」>Swedish Political Geography</font> 
     <ul class="navigation"> 
      <ul><font face="verdana" size=「10」>Borders</font></ul> 
      <ul><font face="verdana" size=「10」>Government</font></ul> 
     </ul> 
    </body> 
</html> 

我也一直有麻煩鏈接其他文件到此頁面。如果你能幫上忙,那將不勝感激。這是我一直在試圖爲代碼:

<a href="borders.html">Borders</a> 

我要指出,我一直在使用本地主機服務器來測試我的代碼,這是我怎麼會最終提出我的項目。

編輯:爲了澄清,我想瑞典政治地理學,邊框和政府都將在同一行。

+0

對於啓動它必須是BordersBorders Radu

沙发
0
0

你需要CSS的一點點這種解決方案。我會從那開始。

如果您有目錄中的所有HTML文件,繼續前進,創建一個名爲index.css或任何你喜歡一個CSS文件,只要擴展名是CSS。裏面每個.html文件的<head></head>把這個鏈接(改變你的CSS文件的名稱,如果你沒有使用index.css):

<link rel="stylesheet" type="text/css" href="index.css"> 

關於你的HTML中,<ul></ul>元素真正的意思包含列表與每個項目被定義爲<li></li>項目,即使只有一個項目。知道了,它應該看起來更像這個有點:

<font face="verdana" size=「10」>Swedish Political Geography</font> 
<ul class="navigation"> 
    <li><font face="verdana" size=「10」>Borders</font></li> 
    <li><font face="verdana" size=「10」>Government</font></li> 
</ul> 

<ul><li>元素是塊級元素,這意味着它們會佔用的可用寬度的100%。我們希望將這些元素更改爲inline-block元素,這些元素將它們與文本內聯對齊,但仍然使您能夠將它們視爲塊級元素。

對於這一點,這個下降到你的CSS文件:

ul { 
    display: inline-block; 
    margin: 0; 
    padding: 0; 
} 

...併爲<li>

li { 
    display: inline-block; 
} 

應該很接近了,但你會發現從子彈名單仍然懸而未決。讓我們去掉那些:

ul { 
    display: inline-block; 
    list-style-type: none; 
    margin: 0; 
    padding: 0; 
} 

添加list-style-type: none;告訴<li>不顯示任何一種裝飾功能。

你現在應該有一個連續的文本行!

實施例:

<font face="verdana" size=「10」>Swedish Political Geography</font> 
 
<ul class="navigation"> 
 
    <li><font face="verdana" size=「10」>Borders</font></li> 
 
    <li><font face="verdana" size=「10」>Government</font></li> 
 
</ul>

板凳
0
1

UL - 是一個元件,就需要把它轉化爲直列元件

顯示:內聯;

在樣式就像這樣(或者你的CSS文件中):

<!DOCTYPE html> 
    <html> 
     <head> 
      <title>Swedish Political Geography</title> 
      <style> 
       ul.navigation { 
       margin: 0; 
       padding: 4px; 
       } 
       ul.navigation li { 
       display: inline; 
       margin-right: 5px; 
       } 
      </style> 
     </head> 
     <body> 
     <font face="verdana" size=「10」>Swedish Political Geography</font> 
     <ul class="navigation"> 
      <li><font face="verdana" size=「10」>Borders</font></li> 
      <li><font face="verdana" size=「10」>Government</font></li> 
     </ul> 
    </body> 
</html> 
+0

想所有要在同一行 - 添加'顯示:內聯;''進ul.navigation block' – jlemon

0
votes
answers
68 views
+10

任何方式來獲取列的超鏈接到谷歌電子表格上的另一列?

0

我從一個網站複製公司名稱列表,他們每個人都有它的超鏈接。任何方式來獲取列的超鏈接到谷歌電子表格上的另一列?

但現在我想貼在一個谷歌電子表格的B列和列中的鏈接列表中的名稱C.

the sample spreadsheet shows here

B欄顯示的姓名和C柱表示,如http其鏈接: // .....

的= HYPERLINK函數的語法如隨後

HYPERLINK(URL,[鏈接標籤])

有沒有什麼辦法可以讓[link_label]成爲鏈接url本身?

或者是否有任何其他方式列出列上的所有超鏈接?

沙发
0
0

Google函數中的方括號表示該參數是可選的。如果省略[link_label],HYPERLINK默認顯示鏈接本身。

換句話說,= HYPERLINK(「www.example.com」)將顯示爲www.example.com

See Google's documentation

0
votes
answers
34 views
+10

關於perl的 W

1

的含義根據該文檔關於perl的 W

W [3]匹配一個 「字」 的字符(字母數字加上 「_」,加 其他連接器標點字符加的Unicode引號)

我不明白什麼是「加上其他連接器標點符號加上Unicode標記」,該文檔似乎沒有說。什麼是w真的?

沙发
0
5

有以Unicode 9.0.0 119821個匹配字符(包括在Perl 5.26.0):

$ unichars -a -u 'w' | wc -l 
119821 

您可以使用unichars列出匹配的屬性的字符,你可以使用uniprops來列出與某個字符匹配的屬性。兩者均由Unicode::Tussle提供。


perluniprops文件pw是短期的p{XPosixWord}[1],所以這是一個應該進行磋商,以瞭解更多有關w和其他性質的文件。

足夠-最近perluniprops [2]文檔w包括以下屬性的並集的:

  • XPosixWord
    • XPosixAlnum:字母和十進制數。
      • Alphabetic
      • Decimal_Number:小數位數。
    • Mark
    • Connector_Punctuation
    • Join_Control

驗證:

$ diff -u  
    <(unichars -a -u 'w')  
    <(unichars -a -u '[p{Alphabetic}p{Decimal_Number}p{Mark}p{Connector_Punctuation}p{Join_Control}]')  
     && echo "No difference." 
No difference. 

詳細地:

  • 定製派生屬性XPosixWord
    • 定製派生屬性XPosixAlnum:字母和十進制數。
      • 派生屬性Alphabetic
        • 派生屬性Uppercase
          • 普通類Uppercase_LetterLu
          • Other_Uppercase[3]
        • 派生p roperty Lowercase
          • 普通類Lowercase_LetterLl
          • Other_Lowercase[3]
        • 普通類Titlecase_LetterLt
        • 普通類Modifier_LetterLm
        • 常規類別Other_LetterLo
        • 普通類Letter_NumberNl
        • Other_Alphabetic[3]
      • 普通類Decimal_NumberNd):十進制數字。
    • 普通類MarkM):
      • 普通類Spacing_MarkMc
      • 普通類Enclosing_MarkMe
      • 普通類Nonspacing_MarkMn
    • 一般Connector_Punctuation類別(Pc
    • Join_Control

  1. 當使用/uuse feature qw(unicode_strings);
  2. 5.28將成爲第一個版本,正確地記錄XPosixWord(因爲在5.18中添加了Join_Control字符)。
  3. 未由Perl公開。
+0

嗨@ikegami。 「unichars」在哪裏?我無法使用apt進行安裝。然後我下載Unicode :: Tussle,有一個unichars腳本。但是'unichars -a -u' w''不起作用 – user15964

+0

該文檔已修復爲blead:https://perl5.git.perl.org/perl.git/commitdiff/9b79e9e3431d11e79a4f85268f70130b7b4369f6 – melpomene

+0

@ user15964,你是什麼意思是「不起作用」?請記住'unichars'可以很慢,特別是'-a'和'-u'。它確實將regex參數應用於每個可能的Unicode字符0x110000。 – ikegami

板凳
0
3

您的報價是perldoc perlre。相應的腳註表示:

它說:

w單個字母數字字符(字母字符,或一個十進制數)相匹配;或連接標點符號,如下劃線(「_」);或附加到其中之一的「標記」字符(如某種口音)。它不匹配整個單詞。要匹配整個單詞,請使用w+。這與匹配英文單詞不同,但在ASCII範圍內,它與一串Perl標識符字符相同。

它也說(如果Unicode規則有效),w等於p{Word}perldoc perluniprops

p{Word}    p{XPosixWord} 

p{Word}p{XPosixWord}的別名。

p{XPosixWord}   w, including beyond ASCII; = p{Alnum} + pM + p{Pc} (Short: p{Word}) 

p{XPosixWord}p{Alnum},pMp{Pc}的聯合。

這裏p{Alnum}匹配任何「字母和(十進制)數字」字,pM匹配任何字符,其一般類別爲「標記」,並p{Pc}匹配它的基本類別是「連接符標點」任何字符。

有關這些類別中的字符的完整列表,我將不得不推遲到Unicode。

+0

@ikegami我很確定「Word」不是Unicode屬性。 – melpomene

+0

非常感謝您的詳細解釋。我沒有想到它會涉及到這麼多事情。但無論如何,我們是否可以簡單地打印' pM'和' p {Pc}'。此刻,我仍然無法理解屬於' pM'或' p {PC}'的字符是什麼樣子,看起來像 – user15964

0
votes
answers
72 views
+10

更新現有資產 - Hyperledger作曲家

0

我試圖創建作曲家簡單hyperledger chaincode,需要一個貸款數目,如果它存在,否則更新相關的資產創建一個新的資產。更新現有資產 - Hyperledger作曲家

我的模型文件看起來像這樣:

asset Loan identified by loanNum{ 
    o String loanNum 
    o Double balance 
} 

transaction createTransaction { 
    o String loanNum 
    o Double transAmount 
} 

我的劇本是這樣的:

function createTransaction(tx) { 
    var NS = 'org.acme.ra'; 
    var factory = getFactory(); 
    var loanToUpdate 

//returns all assets 
    return getAssetRegistry(NS + '.Loan') 
     .then(function(assetRegistry){ 
     return assetRegistry.exists(tx.loanNum); 
     }) 
     .then(function(exists){ 
      if (exists) { 
        return getAssetRegistry(NS + '.Loan')       
         .then(function(assetRegistry2){        
          loanToUpdate = assetRegistry2.get(tx.loanNum) 
          loanToUpdate.balance = tx.transAmount; 
          return assetRegistry2 
         }) 
         .then(function(updateAssetRegistry){ 
          return updateAssetRegistry.update(loanToUpdate)//broken right here 
        }) 
      } 
      else { 
        return getAssetRegistry(NS + '.Loan') 
         .then(function(assetRegistry2){ 
         var newLoan =factory.newResource(NS,'Loan',tx.loanNum); 
          newLoan.balance = tx.transAmount;       
          return assetRegistry2.add(newLoan); 
         })        
      } 
     })  

}

腳本摘要:

  1. 兩個值提供給腳本,貸款編號和交易0金額爲。
  2. 腳本然後返回資產註冊,如果貸款數量已經存在返回 適當布爾。
  3. 如果(在資產註冊表中存在貸款犯規)假,新的資產將利用從交易貸款和餘額創建。
  4. 如果爲True,則返回的資產註冊表,然後我用不用彷徨功能,並設置結果等於在腳本的開始創建的loanToUpdate變量。然後,我使用資產註冊表上的.update(loanToUpdate)函數來更新現有資產。

當布爾是假的腳本正常工作,並創建一個新的資產,但是當布爾是真實的,交易中包含已經存在我得到的錯誤貸款數量「錯誤:預期資源或概念」

編輯

現在,我得到更多的經驗,這一點,我認爲這是可以做到更容易與內置的關係,但低於生病後我更新的功能代碼。

更新的代碼與修復:

function createTransaction(tx) { 
    var NS = 'org.acme.ra'; 
    var factory = getFactory(); 
    var loanToUpdate 

//returns all assets 
    return getAssetRegistry(NS + '.Loan') 
     .then(function(assetRegistry){ 
     return assetRegistry.exists(tx.loanNum); 
     }) 
     .then(function(exists){ 
     if (exists) { 
       return getAssetRegistry(NS + '.Loan')      
        .then(function(assetRegistry2){        
        return assetRegistry2.get(tx.loanNum); 
       }) 
       .then(function(updateloan){ 
         loanToUpdate = updateloan      
         loanToUpdate.balance = tx.transAmount; 
         return getAssetRegistry(NS + '.Loan') 

       }) 
       .then(function(assetRegistry3){ 
         return assetRegistry3.update(loanToUpdate); 
       }) 
     } 
     else { 
       return getAssetRegistry(NS + '.Loan') 
        .then(function(assetRegistry2){ 

         var newLoan = factory.newResource(NS,'Loan',tx.loanNum);        
         newLoan.balance = tx.transAmount;       
         return assetRegistry2.add(newLoan); 
        })        
     } 
    })  

}

沙发
0
0

獲得的資產註冊表返回一個承諾,所以行 loanToUpdate = assetRegistry2.get(tx.loanNum) 需要在承諾鏈的一部分,所以你需要一個.then塊來處理返回的值,然後才能更新它。

0
votes
answers
36 views
+10

如何將某些命令的輸出重定向到文件,但將某些命令保留在控制檯中?

1

我使用下面的perl腳本,如何將某些命令的輸出重定向到文件,但將某些命令保留在控制檯中?

open (STDOUT, '>',"log.txt")|| die "ERROR: opening log.txt
"; 
print "
 inside"; 
close (STDOUT); 
print "
outside"; 

我需要字符串「內部」需要內部log.txt中進行打印。需要在控制檯中打印「外部」字符串。

但是用我的腳本字符串「inside」打印在log.txt中,但字符串「outside」不打印在控制檯上。

任何人都可以幫助我在此

+0

將'使用警告'添加到您的代碼中,您將收到警告消息。 – toolic

+0

歡迎來到Stackoverflow。請參閱[當某人回答我的問題時該怎麼辦?](http://stackoverflow.com/help/someone-answers)並查看[幫助頁面](https://stackoverflow.com/help),它很短並且清楚。如果您對發佈的答案有疑問,那麼預計會發表意見,人們通常會回覆並澄清事情。 – zdim

沙发
0
2

redirect the standard output stream到一個文件open STDOUT, '>', $file。之後,沒有簡單的方法可以打印到控制檯。

一些方法來打印到既文件和控制檯

  • 保存STDOUT重定向之前,並恢復它在需要時以後。再次,看open

    open SAVEOUT, ">&STDOUT" or warn "Can't dup STDOUT: $!"; 
    open *STDOUT, ">", $logfile or warn "Can't redirect STDOUT to $logfile: $!"; 
    say "goes to file"; 
    ... 
    open STDOUT, ">&SAVEOUT" or warn "Can't reopen STDOUT: $!"; # restore 
    say "goes to console"; 
    
  • 打印到一個變量,你打算控制檯什麼;使用select切換的地方印刷品去

    open my $fh_so, '>', my $for_stdout; 
    select $fh_so; 
    say "goes to variable $for_stdout"; 
    say STDOUT "goes to console"; 
    ... 
    select STDOUT; # make STDOUT default again 
    say $for_stdout; # goes to console (all accumulated $fh_so prints) 
    

    有了這個,你可以通過指定STDOUT到達控制檯中的默認,否則你會拿出所有標準輸出,打算打印一旦你selectSTDOUT

  • 打印日誌直接文件,如在Jens's answer

    open my $fh_log, '>', $logfile or die "Can't open $logfile: $!"; 
    say $fh_log "goes to $logfile"; 
    say   "goes to console"; 
    ... 
    close $fh_log; 
    

    其中默認print(或更確切地說say)繼續去控制檯

前兩個看起來有點麻煩,不是他們。我建議直接將日誌打印到日誌文件中,除非需要爲大部分程序重定向STDOUT,或者您有一個令人信服的理由來處理文件句柄。

對於say,它爲打印的內容添加換行符,您需要在開始處使用use feature 'say';。請致電use warnings;use strict;

+0

謝謝,我從來不知道你可以重定向STDOUT。技術上說,你仍然可以使用'warn'來打印到控制檯,雖然 – beasy

+1

@beasy其中一個背景標準文檔是[I/O redirection(bash)](http://tldp.org/LDP /abs/html/io-redirection.html)。但請注意,模塊使這更容易。例如,我可以隨時找到[本文](https://stackoverflow.com/a/47045913/4653379)和[本文](https:// stackoverflow。com/a/43501427/4653379) – zdim

+0

@beasy確實。警告去STDERR,一個不同的流(fd 2)。除非重定向,否則該流在控制檯上出現。當我將STDOUT重定向到某個程序時,我通常也將STDERR重定向(以完全相同的方式),並且通常將其重定向到不同的文件。這是因爲這些程序無人值守,無法使用cron或其他工具,而且我需要將它們的所有輸出保存在文件中。然後,程序可以檢查STDERR文件是否爲空,如果不是,則會向我發送一封電子郵件,警告我存在錯誤(否則會刪除文件)。 – zdim