Community
    • 登入

    Perl subroutine calltips - with PythonScript

    已排程 已置頂 已鎖定 已移動 General Discussion
    52 貼文 4 Posters 7.8k 瀏覽
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • EkopalypseE
      Ekopalypse @PeterJones
      最後由 Ekopalypse 編輯

      @PeterJones

      can you give me a qiuck “Win32::Mechanize::NotepadPlusPlus for dummies äh ekopalypses” to open a new npp buffer?

      PeterJonesP 1 條回覆 最後回覆 回覆 引用 1
      • PeterJonesP
        PeterJones @Ekopalypse
        最後由 編輯

        @Ekopalypse ,

        From the command line, to just open a new file tab:

        perl -le "use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();"
        

        If you want to call a script.pl instead,

        use Win32::Mechanize::NotepadPlusPlus qw/:main/; 
        notepad->newFile();
        

        But that assumes that perl has the right @INC (include library paths) to find Win32::Mechanize::NotepadPlusPlus.

        EkopalypseE 1 條回覆 最後回覆 回覆 引用 2
        • EkopalypseE
          Ekopalypse @PeterJones
          最後由 編輯

          @PeterJones

          D:\perl\bin>perl D:\temp\perl\Win32-Mechanize-NotepadPlusPlus-0.005\Makefile.PL
          Could not open 'lib/Win32/Mechanize/NotepadPlusPlus.pm': No such file or directory at D:/perl/lib/ExtUtils/MM_Unix.pm line 2973.
          

          Now you know why I said “… for ekopalypses” ;-)

          PeterJonesP 2 條回覆 最後回覆 回覆 引用 1
          • EkopalypseE
            Ekopalypse
            最後由 編輯

            hah, it is the other way around … from within the source call perl …

            1 條回覆 最後回覆 回覆 引用 1
            • PeterJonesP
              PeterJones @Ekopalypse
              最後由 編輯

              @Ekopalypse said in Perl subroutine calltips - with PythonScript:

              @PeterJones

              D:\perl\bin>perl D:\temp\perl\Win32-Mechanize-NotepadPlusPlus-0.005\Makefile.PL
              Could not open 'lib/Win32/Mechanize/NotepadPlusPlus.pm': No such file or directory at D:/perl/lib/ExtUtils/MM_Unix.pm line 2973.
              

              For the installation, you need to be in the D:\temp\perl\Win32-Mechanize-NotepadPlusPlus-0.005\ directory, and run d:\perl\bin\perl Makefile.PL instead: you need to be in the same directory as the Makefile.PL, so that the relative paths are all correct.

              EkopalypseE 1 條回覆 最後回覆 回覆 引用 2
              • EkopalypseE
                Ekopalypse @PeterJones
                最後由 編輯

                @PeterJones

                and then I used nmake to create the pm’s.
                I’ve copied the resulting Win32 to …/perl/lib/
                but now I get Can't locate Win32/API.pm in @INC (you may need to install the Win32::API module) (@INC contains: d:/perl/site/lib d:/perl/lib) at d:/perl/lib/Win32/Mechanize/NotepadPlusPlus/Notepad.pm line 9.

                1 條回覆 最後回覆 回覆 引用 1
                • PeterJonesP
                  PeterJones @Ekopalypse
                  最後由 編輯

                  @Ekopalypse ,

                  The other thing I realized: you probably won’t have all the prerequisite modules installed. I normally use the cpanm utility, which distributes with strawberry perl, and that automatically downloads and installs prereqs before the module you’re trying to install. Without such a tool (and if you built your own perl, which I think you did to get the DLL), I don’t know that you have that.

                  I think the make process will tell you what prereqs you’re missing … but it’s been a long time since I’ve done a complicated manual install of a module.

                  Oh, yep, there, you posted the error while I was typing. You’re going to have to install at least Win32::API first… doing that manually is a pain.

                  When you built your own perl, did you at least get cpan, if not cpanm? I think one or both would be in the same directory as perl.exe… if you have cpanm, just do cpanm Win32::Mechanize::NotepadPlusPlus, and everything should work. If you have just cpan, I forget whether it handles prereqs; try cpan Win32::Mechanize::NotepadPlusPlus; if that’s not sufficient, do the missing prereqs one at a time with the cpan client. If you have neither… um… That’s going to be tough.

                  Michael VincentM 1 條回覆 最後回覆 回覆 引用 1
                  • Michael VincentM
                    Michael Vincent @PeterJones
                    最後由 編輯

                    @PeterJones said in Perl subroutine calltips - with PythonScript:

                    If you have just cpan, I forget whether it handles prereqs

                    I believe it does - I normally just use CPAN and it fetches what I need to build.

                    Cheers.

                    1 條回覆 最後回覆 回覆 引用 1
                    • EkopalypseE
                      Ekopalypse
                      最後由 編輯

                      I have cpan and it keeps installing stuff - did I choose to install the world??

                      1 條回覆 最後回覆 回覆 引用 0
                      • EkopalypseE
                        Ekopalypse
                        最後由 編輯

                        it does this now since ~10 minutes

                        1 條回覆 最後回覆 回覆 引用 0
                        • EkopalypseE
                          Ekopalypse
                          最後由 編輯

                          finished - but no Win32::API. started cpan Win32::API now.

                          1 條回覆 最後回覆 回覆 引用 0
                          • Michael VincentM
                            Michael Vincent
                            最後由 編輯

                            @Ekopalypse
                            @PeterJones

                            Is there a reason you build your own Perl? I have Strawberry 5.24 installed and doing this works:

                            970a1b75-52c3-4044-b6aa-e253bb3e979c-image.png

                            That’s @Ekopalypse script from above using my “system” Strawberry Perl 5.24 DLL (the Perl that has my Win32::Mechanize::NotepadPlusPlus and all my other stull installed on it). Not sure why it’s printing “9” in the PythonScript console - is that what it’s supposed to do? I thought I’d get that string "print something ...

                            Cheers.

                            EkopalypseE 1 條回覆 最後回覆 回覆 引用 1
                            • EkopalypseE
                              Ekopalypse @Michael Vincent
                              最後由 Ekopalypse 編輯

                              @Michael-Vincent

                              I get also 9 and from the function it seems correct to return an int.
                              See my previous post. RunPerl returns only an int. Not sure how to get the result (the print output), so far.

                              Michael VincentM 1 條回覆 最後回覆 回覆 引用 1
                              • Michael VincentM
                                Michael Vincent @Ekopalypse
                                最後由 編輯

                                @Ekopalypse said in Perl subroutine calltips - with PythonScript:

                                I get also 9

                                Oh, OK - great then. Seems I may be able to keep testing along without having to build a Perl and just use my Strawberry install.

                                Cheers.

                                EkopalypseE 1 條回覆 最後回覆 回覆 引用 1
                                • EkopalypseE
                                  Ekopalypse @Michael Vincent
                                  最後由 編輯

                                  @Michael-Vincent

                                  My Win32::API has been built but not installed because of failing tests I guess. Can you try the "use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();" and see what happens?

                                  Michael VincentM 2 條回覆 最後回覆 回覆 引用 1
                                  • Michael VincentM
                                    Michael Vincent @Ekopalypse
                                    最後由 編輯

                                    此回覆已被刪除!
                                    1 條回覆 最後回覆 回覆 引用 0
                                    • Michael VincentM
                                      Michael Vincent @Ekopalypse
                                      最後由 Michael Vincent 編輯

                                      @Ekopalypse said in Perl subroutine calltips - with PythonScript:

                                      Can you try

                                      from ctypes import CDLL, POINTER, c_int, c_char_p
                                      
                                      perllib = CDLL(r'C:\Strawberry\perl\bin\perl524.dll')
                                      
                                      ["-le", "use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();"]
                                      
                                      perllib.RunPerl.restype = c_int
                                      perllib.RunPerl.argtypes = c_int, POINTER(c_char_p), POINTER(c_char_p)
                                      args = (c_char_p * 2)(b"-le", b"use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();")
                                      print(perllib.RunPerl(len(args),args, None))
                                      

                                      It just prints 9 in the PythonScript console. No new tab is opened. If I run the command itself from a prompt:

                                      C:\ > perl -e "use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();"
                                      

                                      I get a new tab in Notepad++ as expected.

                                      At least if it printed 42 we’d know we’re on to something …

                                      Cheers.

                                      EkopalypseE 1 條回覆 最後回覆 回覆 引用 2
                                      • EkopalypseE
                                        Ekopalypse
                                        最後由 編輯

                                        Ja, 42 would be nice :-)
                                        So 9 seems to be an error code.

                                        1 條回覆 最後回覆 回覆 引用 1
                                        • EkopalypseE
                                          Ekopalypse @Michael Vincent
                                          最後由 Ekopalypse 編輯

                                          @Michael-Vincent

                                          Can you try one more thing?
                                          Replace the RunPerl call with this
                                          print(perllib.RunPerl(len(args), args, (c_char_p * 1)(b'')))
                                          With the newFile code, please.

                                          Michael VincentM 1 條回覆 最後回覆 回覆 引用 1
                                          • Michael VincentM
                                            Michael Vincent @Ekopalypse
                                            最後由 編輯

                                            @Ekopalypse

                                            Same 9.

                                            I tried both:

                                            from ctypes import CDLL, POINTER, c_int, c_char_p
                                            
                                            perllib = CDLL(r'C:\Strawberry\perl\bin\perl524.dll')
                                            
                                            ["-e", "use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();"]
                                            
                                            perllib.RunPerl.restype = c_int
                                            perllib.RunPerl.argtypes = c_int, POINTER(c_char_p), POINTER(c_char_p)
                                            args = (c_char_p * 2)(b"-e", b"use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();")
                                            print(perllib.RunPerl(len(args),args,(c_char_p * 1)(b"use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();")))
                                            

                                            and

                                            from ctypes import CDLL, POINTER, c_int, c_char_p
                                            
                                            perllib = CDLL(r'C:\Strawberry\perl\bin\perl524.dll')
                                            
                                            ["-e", "use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();"]
                                            
                                            perllib.RunPerl.restype = c_int
                                            perllib.RunPerl.argtypes = c_int, POINTER(c_char_p), POINTER(c_char_p)
                                            args = (c_char_p * 2)(b"-e", b"use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();")
                                            print(perllib.RunPerl(len(args),args,(c_char_p * 1)(b'')))
                                            

                                            HOWEVER … this:

                                            from ctypes import CDLL, POINTER, c_int, c_char_p
                                            
                                            perllib = CDLL(r'C:\Strawberry\perl\bin\perl524.dll')
                                            
                                            ["use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();"]
                                            
                                            perllib.RunPerl.restype = c_int
                                            perllib.RunPerl.argtypes = c_int, POINTER(c_char_p), POINTER(c_char_p)
                                            args = (c_char_p * 1)(b"use Win32::Mechanize::NotepadPlusPlus qw/:main/; notepad->newFile();")
                                            print(perllib.RunPerl(len(args),args,None))
                                            

                                            produces 0 in the PythonScript console.

                                            Cheers.

                                            1 條回覆 最後回覆 回覆 引用 2
                                            • 第一個貼文
                                              最後的貼文
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors