मैं यह करने के लिए एक तरीका खोज निकाला है और यह भी खिड़कियों पर जेनकींस मैटलैब इंटरफेस के लिए यह कर रहा हूं।
मूल विचार यह है कि आप डायरी कमांड का उपयोग करेंगे, लेकिन तब फ़ाइल को पूंछ लेंगे, लेकिन यदि आप एकाधिक मैटलैब उदाहरण खोलते हैं तो आपको पूंछ कमांड को मारने के लिए एक स्मार्ट तरीका चाहिए क्योंकि नाम टकराव होंगे। तो जिस विधि का मैं उपयोग कर रहा हूं वह फ़ाइल log.txt नाम देना है जहां पीआईडी का उपयोग किया जाता है MATLAB का पीआईडी यह खुलता है जब यह खुलता है।
MATLAB में एक अनियंत्रित सुविधा है जो आपको इसकी पीआईडी प्राप्त करने की अनुमति देती है। तो अब, आपकी बैच फ़ाइल और MATLAB दोनों को एक यादृच्छिक पाठ फ़ाइल को पढ़ने/लिखने के बिना पीआईडी पता है जो कई नौकरियों को निष्पादित करते समय गन्दा हो जाएगा। तो पीआईडी आप इसे अपने अद्वितीय पहचानकर्ता के रूप में उपयोग करते हैं।बैच फ़ाइल को मरने के लिए tail -f को मारने के लिए "tail -f" का पीआईडी भी उपयोग किया जाता है और प्रक्रिया आमंत्रण से जुड़े कमांडलाइन विवरण का उपयोग करके MATLAB द्वारा पाया जाता है क्योंकि यह फिर से अद्वितीय पीआईडी लॉग फ़ाइल नाम का उपयोग करता है।
यह कुछ wmic आदेशों का उपयोग करता है और Windows Vista/7 या इससे ऊपर की आवश्यकता है। एक्सपी के साथ आपको प्रक्रिया आईडी प्राप्त करने के लिए शायद कड़ी मेहनत करनी पड़ेगी लेकिन अभी भी संभव होनी चाहिए।
1) खिड़कियों के लिए जीएनयू awk प्राप्त करें:: http://gnuwin32.sourceforge.net/packages/gawk.htm
2) विंडोज़ संसाधन किट से tail.exe प्राप्त करें: http://www.microsoft.com/en-us/download/details.aspx?id=17657
3) यकीन है कि पूंछ और awk बनाओ
यहाँ क्या करना है आपके पथ में हैं (विंडोज़ resourece किट मुझे नहीं लगता कि स्वचालित रूप से उन्हें पथ में डालता है)
3) matlabrun.bat नामक एक बैच फ़ाइल बनाएं, (नोट: आपको @echo off की आवश्यकता है, साथ ही पूरा आदेश है काफी लंबे समय से है, सही स्क्रॉल ..)
@echo off
wmic process call create "c:\matlab\bin\win64\matlab.exe -r \"cd('c:\jenkins\workspace\test'); workdir=pwd; outpath=[pwd '\output'] ; try; run('C:\MATLAB\work\test_run'); end; quit; \" " | findstr ProcessId | awk "{print $3}" | awk -F";" "{ print $1 }"
4) एक और बैच run.bat बुलाया फ़ाइल के साथ बनाएँ:
for /f %%i in ('matlabrun.bat') do (
echo MATLAB Log... > log%%i.txt
tail -f log%%i.txt
set logfilename=log%%i.txt
goto next
)
:next
del /f %logfilename%
5) run.bat फ़ाइल matlabrun.bat और रुको के बाद से निष्पादित करेंगे पारित नहीं किया गया है, matlab तुरंत कमांड लाइन पर वापस आ जाएगा और tail -f कमांड निष्पादित करेगा। इससे बैच फ़ाइल को तब तक पूरा करने से रोक दिया जाएगा जब तक आप इसे मार नहीं देते। matlabrun.bat matlab के पीआईडी देता है।
6) एक और महत्वपूर्ण नोट: चूंकि आप "wmic process create" का उपयोग कर रहे हैं, जो आपको एक पीआईडी प्रदान करेगा जो MATLAB उपयोग कर रहा है, लेकिन c: \ windows \ system32 की कार्यशील निर्देशिका में डिफ़ॉल्ट होगा। इसलिए मैं मैटलैब में कार्य निर्देशिका पास करता हूं। wmic प्रक्रिया बनाने के लिए मैटलैब चलाने के लिए आपके कमांड स्ट्रिंग में दिए गए पैरामीटर के बारे में भी कुछ खास बात है। तो ऐसा लगता है कि आपके कमांड स्ट्रिंग में अल्पविरामों का उपयोग करने में समस्या है। तो मेरा सुझाव है कि उन लोगों का उपयोग न करें, या उन्हें कैसे बचें, यह पता लगाएं (यह हो सकता है कि ^, काम करता है, लेकिन मैंने अपने मैटलैब रन कमांड में वैसे भी अपने कॉमा को हटा दिया)।
6) "test_run.m" फ़ाइल में सही लॉग फ़ाइल को लिखने और सही पूंछ-एफ उदाहरण को मारने के लिए निम्न कोड शामिल है।
matlabpid=feature('getpid');
filename=['log',num2str(matlabpid),'.txt'];
filenamefull=[workdir,'\',filename];
diary(filenamefull);
disp('Script starting...')
%%% put your code here %%%
disp('Script completed...');
diary off;
%%% FIND PID of tail.exe and kill it
%%% by using the name of the log file in the process command line
[a,b]=dos(['wmic process get Commandline,ProcessId']);
C=textscan(b,'%s','delimiter','\n');C=C{1};
for jj=1:size(C,1),
if strfind(C{jj},filename),
D=textscan(C{jj},'%s');D=D{1};
dos(['taskkill /f /pid ',D{4}]) %kills tail.exe which is the log watcher
break
end
end
7) आप इसे run.bat करके शुरू करते हैं। यह मैटलैब को चलाएगा और निष्पादित करेगा, फिर आउटपुट को शुरू करना शुरू करें जबकि MATLAB रीयल-टाइम में चलता है। फिर जब यह किया जाता है तो यह लॉग फ़ाइल को हटा देगा।
8) मेरे निर्देशिका संरचना/फ़ाइलें (मैं Win7 64 बिट का उपयोग कर रहा) इन स्थानों में हैं:
c: \ जेनकींस \ कार्यक्षेत्र \ परीक्षण \ tail.exe
c: \ जेनकींस \ कार्यक्षेत्र \ test \ awk.exe
c: \ जेनकींस \ कार्यक्षेत्र \ परीक्षण \ matlabrun.bat
c: \ जेनकींस \ कार्यक्षेत्र \ परीक्षण \ run.bat
c: \ matlab \ काम \ test_run एमएम
c: \ matlab \ बिन \ win64 \ matlab.exe
आप 32 बिट matlab, बिंदु यह Win32 निर्देशिका के लिए उपयोग कर रहे हैं।सही पीआईडी प्राप्त करने के लिए, आपको win32 या win64 निर्देशिका में वास्तविक matlab.exe बाइनरी निर्दिष्ट करने की आवश्यकता है।
यहां चर्चा के समान: http://stackoverflow.com/questions/37830871/how-to-get-matlab-output-in-jenkins-console –