Reputation: 5921
I am working on CnvPytor and trying to automate some commands using Perl. But it is not working because when I give first command it is going inside another bash prompt (cnvpytor). Please refer the below screenshot,
I have written the below script, but it is not working
$x = `cnvpytor -root s1.pytor -view 10000`; #normal bash
$x = `set Q0_range -1 0.5`; # this and after this, enter into the cnvpytor
$x = `set p_range 0 0.0001`;
$x = `set p_N 0 0.5`;
$x = `set print_filename s1_output.vcf`;
$x = `set annotate`;
$x = `print calls`;
$x = `quit`;
Upvotes: 2
Views: 179
Reputation: 452
There's no need for a temporary file, and you can still do it using backticks if you don't mind it using a shell. This also will allow you to capture the output of the cnvpytor
command, if there is any. Here's how I would do it:
my $output = `cnvpytor -root s1.pytor -view 10000 2>&1 <<EOT
set Q0_range -1 0.5
set p_range 0 0.0001
set p_N 0 0.5
set print_filename s1_output.vcf
set annotate
print calls
quit
EOT`;
The 2>&1
redirects STDERR to STDOUT, which will cause it to be captured in $output
. I feel that's usually a good idea whenever using backticks.
Upvotes: 1
Reputation: 740
If you don't need the output from the command, use:
open(PIPE, '|cnvpytor -root s1.pytor -view 10000');
print PIPE <<'EOF';
set Q0_range -1 0.5
set p_range 0 0.0001
set p_N 0 0.5
set print_filename s1_output.vcf
set annotate
print calls
quit
EOF
close(PIPE);
If you do need the output to the command, you would write your cnvpytor commands to a file and then do:
open(INPUT, 'cnvpytor -root s1.pytor -view <filename |');
while (<INPUT>) {
# Do something with each line of output
}
close(INPUT);
unlink('filename');
Where "filename" is your temporary file with input.
Upvotes: 2