day 11 system interaction
play

Day 11: System Interaction Suggested reading: Learning Perl (6th Ed.) - PowerPoint PPT Presentation

Computer Sciences 368 Introduction to Perl Day 11: System Interaction Suggested reading: Learning Perl (6th Ed.) Chapter 16: Process Management 2012 Summer Cartwright 1 Computer Sciences 368 Introduction to Perl Homework Review 2012 Summer


  1. Computer Sciences 368 Introduction to Perl Day 11: System Interaction Suggested reading: Learning Perl (6th Ed.) Chapter 16: Process Management 2012 Summer Cartwright 1

  2. Computer Sciences 368 Introduction to Perl Homework Review 2012 Summer Cartwright 2

  3. Computer Sciences 368 Introduction to Perl Problem DB File ? App #1 App #2 2012 Summer Cartwright 3

  4. Computer Sciences 368 Introduction to Perl (One) Solution DB File Perl Script App #1 App #2 2012 Summer Cartwright 4

  5. Computer Sciences 368 Introduction to Perl Introducing … The Shell 2012 Summer Cartwright 5

  6. Computer Sciences 368 Introduction to Perl The Shell • Is a program (e.g., /bin/sh ) – interactive or scripted – Another interpreted scripting language (like Perl) while (1) { print '% '; my $cmd = <STDIN>; do($cmd); } • Mostly, finds & runs other programs • Has variables, control structures, functions, … if [ $# -lt 3 ]; then echo 'Too few args!'; fi • Allows control over input and output gcc foo.c -o foo > compile.log 2> errors.log • Supports basic workflows grep '^[0-9]' file.txt | sort | uniq -c 2012 Summer Cartwright 6

  7. Computer Sciences 368 Introduction to Perl Common Shell Commands cd , echo Built-in man Manual pages ls , find Show file entries chown , chmod Change file privileges cp , mv , rm , ln , unlink Manipulate whole files mkdir , rmdir Manipulate directories cat , more , less , wc View files grep , sed , awk Filter/change files pico / nano , vi , emacs Edit text perl , python , ruby Scripting 2012 Summer Cartwright 7

  8. Computer Sciences 368 Introduction to Perl Shells and Commands command line (shell) % foo -x % PWD: ~/scripts PATH: /usr/bin:/usr/local/bin:… foo (Perl) chdir 'data'; system('bar'); PWD: ~/scripts /data PATH: /usr/bin:/usr/local/bin:… bar (C) printf("hi\n"); exit(2); PWD: ~/scripts/data PATH: /usr/bin:/usr/local/bin:… 2012 Summer Cartwright 8

  9. Computer Sciences 368 Introduction to Perl The System ⇒ Your Script 2012 Summer Cartwright 9

  10. Computer Sciences 368 Introduction to Perl How to Get Input Into Your Script • Define (hard-code) input in script + Easy to code – Must change script to change input • Ask user for terminal input + Easy to code, no script changes each run – Cannot automate (easily) — user must type input each run • Read input from files + No script changes each run, can automate – Must parse file contents; separate file to manage • Accept command-line arguments + No script changes each run, can automate – Must parse arguments; cumbersome for many or long inputs • Read environment variables + No script changes each run, can automate – Must parse arguments; cumbersome for many or long inputs 2012 Summer Cartwright 10

  11. Computer Sciences 368 Introduction to Perl Command-Line Arguments % script.pl data.txt 1200 'Tim Cartwright' $0 command (script) name @ARGV command-line arguments #!/usr/bin/perl use strict; use warnings; if (scalar(@ARGV) != 3) { die "usage: $0 PATH VALUE NAME\n"; } my ($path, $value, $name) = @ARGV; 2012 Summer Cartwright 11

  12. Computer Sciences 368 Introduction to Perl (Required) Arguments and Options % script.pl --lo --with foo -aXb file1 • Use Getopt::Long for options (starting with - ) • Required arguments remain in @ARGV use Getopt::Long; my $lo = 0; my $with = ''; GetOptions('lo' => \$lo, 'with=s' => \$with, # etc. ); my $file = $ARGV[0]; # do after GetOptions 2012 Summer Cartwright 12

  13. Computer Sciences 368 Introduction to Perl Environment • %ENV : environment variables • Readable and writable while (my ($key, $value) = each %ENV) { print "$key => $value\n"; } my @path = split(':', $ENV{'PATH'}); my @new = grep(! m{/sbin}, @path); $ENV{'PATH'} = join(':', @new); delete $ENV{'SOME_OTHER_VAR'}; 2012 Summer Cartwright 13

  14. Computer Sciences 368 Introduction to Perl Your Script ⇒ The System 2012 Summer Cartwright 14

  15. Computer Sciences 368 Introduction to Perl Running a Command system(…) • Runs the given command as a subprocess • May create a shell to parse command • Waits for command to finish • Command inherits environment, etc. system("gzip $output_file"); system('Rscript', 'foo.R', 1200, 42); system("octave test-script > my_oct.log"); 2012 Summer Cartwright 15

  16. Computer Sciences 368 Introduction to Perl Sneaky system() Subtleties Create a shell? system('ls'); # no system('ls >> my_file'); # yes system('ls', '>>', 'my_file'); # no Children do not a ff ect parent system('pwd'); # => /home/cat/foo system('cd bar'); system('pwd'); # => ??? 2012 Summer Cartwright 16

  17. Computer Sciences 368 Introduction to Perl Sneaky system() Subtleties II Watch out for quoting issues system("echo 'Don'\\''t say \"no\"!'"); [shell] echo 'Don'\''t say "no"!' [output] Don't say "no"! 2012 Summer Cartwright 17

  18. Computer Sciences 368 Introduction to Perl Return Values • system() returns exit code × 256 ( << 8 ) • Exit code of 0 is good in shell, • But 0 is false in Perl, so… system(…) and die('fail'); # confusing !system(…) or die('fail'); # may miss ! • … instead, strive for clarity: system(…) == 0 or die('fail'); if (system(…) != 0) { die('fail'); } 2012 Summer Cartwright 18

  19. Computer Sciences 368 Introduction to Perl Errors • system() return value ≡ $? ≡ exit code << 8 • $? == -1 means it failed to execute • $! is the system error message • Rarely need to be this thorough: if ($? == -1) { print "failed to execute: $!\n"; } elsif ($? & 127) { print "died with signal"; } else { print "exited " . ($? >> 8) . "\n"; } 2012 Summer Cartwright 19

  20. Computer Sciences 368 Introduction to Perl Getting Output my $sys_date = `date`; • Like system() but returns standard output • $? and $! are set in the same way • Need standard error, too? my $sys_date = `date 2>&1`; • In list context, returns list of lines in output • Backticks interpolate! my @files = `find $directory`; 2012 Summer Cartwright 20

  21. Computer Sciences 368 Introduction to Perl Miscellaneous Quit script with given exit code ( 0 = good) exit 1; Print message to standard error and exit (non-zero) die 'message'; Print message to standard error print STDERR 'message'; warn 'message'; 2012 Summer Cartwright 21

  22. Computer Sciences 368 Introduction to Perl When To Use • Glue between existing commands • More powerful shell • Workflow management • Not to replace Perl functions! – E.g., do not actually use `date` • Your ideas? 2012 Summer Cartwright 22

  23. Computer Sciences 368 Introduction to Perl Last 2 Slides… 2012 Summer Cartwright 23

  24. Computer Sciences 368 Introduction to Perl Other Scripting Languages • In command-line scripts, expect – Command-line arguments – Environment – Standard in, out, and error – System calls – Exit with status – Windows will be di ff erent… • Embedded scripting (PHP, Lua, JavaScript, …) – Expect more restrictions 2012 Summer Cartwright 24

  25. Computer Sciences 368 Introduction to Perl Homework • Find IP addresses for image downloads • Use external commands for: – Fetching an HTTP document (web page) – Looking up IP addresses • Middle section will involve regular expressions 2012 Summer Cartwright 25

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend